Le 24/04/2019 à 09:25, Antoine ELIAS a écrit :
Le 23/04/2019 à 22:50, Samuel Gougeon a écrit :
Hello,

Le 23/04/2019 à 22:28, Antoine ELIAS a écrit :
.../...

Just a question, specific to ndgrid, why do not update the function to return a list in case of nargout == 1 ?

You likely mean as a unique explicit argout, instead of the varargout "implicit" list. Wrapping the result in a list would break a lot of code, and would make addressing the results more complicated for most frequent cases.

Absolutely not ;)
I said that only for this specific case "ndgrid".

Yes, this is what i understood.

I think that only break non-working code.

With the current implementation, the following works, with argn(1)==1:

--> X = ndgrid(1:4)
 X  =
   1.   1.   1.   1.
   2.   2.   2.   2.
   3.   3.   3.   3.
   4.   4.   4.   4.

and varargout is a real list ! ( Do not discriminate ^^ )
Yes, it is build as a real list to feed the return. But is not /processed/ as a classic list when returning, since it is assigned in a distributive way, while it's not the case for a simple list.
So yes we have to discriminate both, as the test below shows it:
--> function varargout = test()
  >  varargout = list("a","b","c")
  > endfunction

--> [a,b,c] = test()
 c  =
 c

 b  =
 b

 a  =
 a

--> function L = test()
  >  L = list("a","b","c")
  > endfunction

--> [a,b,c] = test()
Wrong number of output arguments.

And, alone, returning a list as the first element in or out of varargout would not fix the issue:

--> function varargout = test()
  >  varargout = list(list("a","b","c"))
  > endfunction

--> a = list(,,);
--> a(:) = test()
Unable to insert multiple item in a list.

--> function [r,varargout] = test()
  >     if argn(1)==1
  >         r = list("a","b","c")
  >         varargout = list()
  >     end
  > endfunction
--> a = list(,,);
--> a(:) = test()
Unable to insert multiple item in a list.

For the general discussion, i think that, from a user's point a view, when using a container as LHS argument, a distributive assignment would be *often* very useful. It might be either through a new *.=* "operator", or through the classic "=" one but only when for instance the RHS is a container as well,

 * either a list with the right number of elements at depth = 0
 * or a cell or struct array with the same sizes as the cell or struct
   (or struct or cell) on the LHS

AFAIR, this kind of feature is already reported as a wish.

Best regards
Samuel

_______________________________________________
dev mailing list
dev@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/dev

Reply via email to