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

Federico Miyara fmiyara at fceia.unr.edu.ar
Tue Nov 26 21:51:18 CET 2019


This is only speculation: Could the tilde be used in some cases where 
some arguments that are not the last ones are optional, and the function 
definition includes some way to check if the corresponding argument has 
or has nor been provided?

I've noticed in some cases Scilab allows just to omit the argument 
keeping the commas.

Regards,

Federico Miyara

On 26/11/2019 12:15, Chin Luh Tan wrote:
> 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/fbe20840/attachment.htm>


More information about the users mailing list