[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