[Scilab-users] How to convert the ~ input placeholder <= Re: convert matlab code to scilab

Samuel Gougeon sgougeon at free.fr
Mon Nov 25 21:20:52 CET 2019


Le 23/11/2019 à 15:35, Samuel Gougeon a écrit :
> HelloPhilipp, and to all (former ;-) matlabers,
>
> Le 16/10/2019 à 11:46, P M a écrit :
>> Dear experts,
>>
>> trying to convert a matlab code to scilab I come across following line:
>> [~,~,Minstances_hat]  =  unique(B(:));
>> How to replace the "~" symbol?
>> B is the blue channel of a RGB image...hence a m x n matrix of 
>> integers (type(B) = 8 )
>
>
> This issue is now reported as bug 16250 
> <http://bugzilla.scilab.org/show_bug.cgi?id=16254>.
>
> Solving this issue would improve the converter.
> I may contribute to solve it. However, I do not use to use Matlab or 
> Octave. So i don't know how the ~ placeholder set in the list of 
> /inputs/ is processed inside the called function. This message is a 
> call for information about this topic.
>
> Ignoring an output is trivial. As suggested by Stéphane, the ans 
> variable is a good candidate as replacement for ~,
> just as a fake recipient, as in "[~, ia] = unique(A)"   => "[ans, ia] 
> = unique(A)"
>
> The meaning of ignoring an input is a priori completely different, at 
> least from a Scilab point of view.
>
> This leads to the fact that, on the "function ..." line, the converter 
> will have to distinguish the list of inputs from the list of outputs, 
> and then process the same ~ character in 2 different ways.
> This processing would have to run also when the "function ..." line is 
> split on several rows with the "..." continuation marks.
>
> First, i will need an actual example of function call with ~ in the 
> input list, runnable in Octave.
> Any compact suggestion is welcome.
> At least 2 use cases are expected: one calling a function written in 
> Octave/Matlab language (improperly called "macros" in Scilab), the 
> other one calling a hard-coded function.
>
> Let's consider the first case, with a "macro":
>
>   * What does  the ~ sent placeholder pass to the function? How is it
>     detected/detectable inside the macro ?
>   * How is it processed by the function? Is there a generic default
>     processing, as replacing it with the empty matrix [], or whatever
>     else?
>
Where is the crowd of matlabers?

The page describing this feature: 
https://fr.mathworks.com/help/matlab/matlab_prog/ignore-function-inputs.html
But i do not clearly understand it.
Apparently, "canceling" an input is done (only?) at the function 
definition, not when calling it, unlike for the outputs.
If so, then /ans/ could also be used as a replacement, meaning that 
anyway this input won't be used inside the function.

A test of call with Octave yields an error:

 >> function [r, s] = funtest(a,b,c)
end
 >> funtest(1,~,3)
parse error:
   invalid use of empty argument (~) in index expression
 >>> funtest(1,~,3)
                  ^
 >>

Any further insight is welcome.
Samuel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20191125/4c478db9/attachment.htm>


More information about the users mailing list