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

Antoine ELIAS antoine.elias at scilab-enterprises.com
Tue Nov 26 19:23:08 CET 2019


Hello,

Or when you have to write a function following a specific prototype ( 
graphic events, optim, ode, ...)

If I would write a function that call another, I have to specify a 
prototype to allow user to call my function.
But in some case, the final user does not need all parameters so he can 
replace unused inputs by ~.
I think that only syntactic sugar.

example:
function for_each(iterable, fn)
     for i=1:size(iterable, "*")
         fn(iterable(i), i, iterable); //item, index, array
     end
endfunction

Users can define fn like this if tthey only need item and don't want to 
use index and whole array
function my_func(a, ~, ~)
     //blabla
end

I don't say that's essential :p
That's my understanding
Antoine
Le 26/11/2019 à 16:15, Chin Luh Tan a écrit :
> Hi Samuel,
>
> In fact I've not been using matlab for more than 10 years, so I try to 
> understand this as well.
>
> The input tilde is still abit confusing for me as well, I am trying to 
> understand its' usage as this page: 
> https://octave.org/doc/v4.4.1/Ignoring-Arguments.html
>
> function val = pick2nd (~, arg2)
>   val = arg2;
> endfunction
>
> I can't see the reason why the input need to ignored in this case, is 
> it defined but not being user due to bad user overlooked it? or is it 
> neglected and the default value would be used?
>
> Then I find this : 
> https://stackoverflow.com/questions/25204074/correct-use-of-tilde-operator-for-input-arguments
>
> */"The tilde is only for function declaration. Matlab's mlint 
> recommends to replace unused arguments by ~. The result is a function 
> declared like this function output = MyFunction(a, b, ~, c). This is a 
> very bad practice. /**/
> /*
> */
> /*
> */Since you have a function where the parameters are optional, you 
> must call the function with empty arguments 
> output=MyFunction(str1,str2,[],[],...,true)."/*
>
> It sound to me that the input tilde is suggested by the matlab mlint 
> to improve the code so that the unused variable need not to pass into 
> the function, and to improve memory management?
>
> So there are 2 possibilities for the input tilde :
>
> 1. used to replace unused variable in the input which defined by user, 
> but not being used. So the mlint recomment to replace with tilde, it 
> could be be remove possibly due to the project has been calling the 
> functions for many time, and changing the 4th to 3rd argument might 
> need to change a lot of codes. In this case, the %unused would be good.
>
> 2. Tilde used to tell the function to use default value, then 
> replacing it with % unused might cause error.
>
> Think we need some x-matlaber to confirm which case.
>
> Thanks again.
>
> rgds,
> CL
>
>
>
> ---- On Tue, 26 Nov 2019 20:36:01 +0800 *Samuel Gougeon 
> <sgougeon at free.fr <mailto:sgougeon at free.fr>>* wrote ----
>
>     Hello Chin Luh,
>
>     Thanks a lot for your input.
>
>     Both cases -- input and output will have to be converted --, since
>     the converter is also made to convert (sets of) functions
>     definitions, not only scripts.
>
>     About the input case: Steven's answer is still not really clear to
>     me. Doing some tests on Octave, we must anyway provide some input
>     at calling time when  ~ is used as default input in the
>     definition. AFAIU, this ~ could just be to make sure that no
>     variable name used inside the function matches the name of the
>     input argument in the function definition, since "~" alone can't
>     be actually used as variable's name. In this case, for Scilab, any
>     input ~ could be replaced with an improbable variable name like
>     "%unused" or "%kwzxq", and that should do it.
>
>     Please, correct me if someone understands something else.
>
>     Best regards
>     Samuel
>
>     Le 26/11/2019 à 03:33, Chin Luh Tan a écrit :
>
>
>     _______________________________________________
>     users mailing list
>     users at lists.scilab.org <mailto:users at lists.scilab.org>
>     http://lists.scilab.org/mailman/listinfo/users
>
>         Hi Samuel,
>
>         I think your assumption likely correct on the input and the
>         output using ~
>
>         https://www.mathworks.com/matlabcentral/answers/288016-tilde-doesn-t-work-for-ignoring-my-inputs
>
>         "
>         You *can*use tilde to ignore input arguments when you
>         *define*the function.
>         You *cannot*use tilde to ignore input arguments when you
>         *call*the function.
>         You *cannot*use tilde to ignore output arguments when you
>         *define*the function.
>         You *can*use tilde to ignore output arguments when you
>         *call*the function.
>         If you want to be able to specify only the third argument,
>         there must be some way for your function to disambiguate the
>         one-input call from a call that specifies only the third
>         input. Usually in MathWorks function this is done by
>         specifying [] for the arguments for which the user doesn't
>         want to specify. In that case the code would use the default
>         value if either narginis too small or if narginis large enough
>         and the specified input argument isempty.
>         "
>         From what I could think off, mat2sci conversion to replace ~
>         at the output arguments should always be safe. As for the
>         input, since the tilde could not be used as input when calling
>         function, I think there should not be any cases that need to
>         be implemented in conversion?
>         Thanks.
>         Regards,
>         CL
>
>
>         ---- On Tue, 26 Nov 2019 04:20:52 +0800 *Samuel Gougeon
>         <sgougeon at free.fr> <mailto:sgougeon at free.fr>* wrote ----
>
>             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
>
>
>             _______________________________________________
>             users mailing list
>             users at lists.scilab.org <mailto:users at lists.scilab.org>
>             http://lists.scilab.org/mailman/listinfo/users
>
>
>
>
>         _______________________________________________
>         users mailing list
>         users at lists.scilab.org  <mailto:users at lists.scilab.org>
>         http://lists.scilab.org/mailman/listinfo/users
>
>
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20191126/8e4e29df/attachment.htm>


More information about the users mailing list