Yes, 20. I agree with the problem. It's undoubtedly a holdover from when you had to use a:0, a:1, etc., and couldn't get a:000 (as a list), before proper lists were added.
I think the system could be extended to allow an arbitrary number of arguments for a:000 and still limit to up to 20 via the old mechanism: if you want to access the 21st on, use a:000 instead. Of course, if you have dozens and dozens of arguments, you could wrap them in a [] pair to convert it into a list of arbitrary length (that process isn't limited by the 20 function parameter limit). Programmatically speaking, if you're doing this dynamically, it seems to me as if creating a list of arbitrary length is better than creating an execute statement that takes a large number of individual parameters. -- Salman On Wed, Jan 6, 2021, 15:38 BPJ <[email protected]> wrote: > Den ons 6 jan. 2021 21:29Salman Halim <[email protected]> skrev: > >> While I can't explain why things work the way they do, here is a custom >> function that should do what you want (called Min); it takes a variable >> number of arguments, flattens incoming lists into a single list and then >> calls the built-in min. You can see that it uses the type() function to >> figure out the type of the incoming argument (to answer another question >> you asked herein): >> >> function! Min( ... ) >> let collection = [] >> >> for entry in a:000 >> if ( type( entry ) == v:t_list ) >> call extend( collection, flatten( entry ) ) >> else >> let collection += [ entry ] >> endif >> endfor >> >> return min( collection ) >> endfunction >> >> " Sample call >> " echo Min(9, 22, [5, [3, 7]]) >> > > Isn't the problem that the number of varargs to a Vimscript function is > limited, while a List can have many more elements (although there is > probably a limit there too)? > > > >> On Wed, Jan 6, 2021 at 2:37 PM L A Walsh <[email protected]> wrote: >> >>> On 2021/01/02 08:01, Tim Chase wrote >>> > though a lot of vim stuff takes inspiration from >>> > Python where min() is a vararg function letting >>> > you do as the OP requests >>> > >>> > min(arg1, arg2, arg3, arg4, …) >>> > >>> > so it's a reasonable sort of hope/expectation. >>> > It just doesn't happen to be a vim thing. >>> > >>> --- >>> Is there any reason why vim couldn't have a simplified >>> version, "Min" that takes a variable number of args >>> rather than its current behavior of taking a fixed >>> number (1) of "list-args"? >>> >>> I.e. it sounds like, by being declared "varargs", >>> that min could take a variable number of args (?). >>> >>> Is a vim function capable of determining the type >>> of the arg(s) passed to it? Like if I passed >>> min(3,4,[1,2]), can vim determine that it got 3 arguments, >>> where it knows that they are two "plain" args, and >>> 1 is a "List" such that it could automatically expand "List" args, >>> and "inline" its elements into 1 longer set of arguments >>> that 'min' can return the value of? >>> >>> I.e., it seems like "min", rather than returning an "Error" >>> when presented with multiple-args, could simply return the >>> minimum of those args, _and_, if any of those args were a "List", >>> like [1,2], then merge those args into the set of multiple >>> args that was passed. This would mean that ([1,2]) would >>> automatically expand its List into multiple arguments (1,2), and >>> then return the "min" value, i.e. "doing the right thing", while >>> keeping compatibility with current behavior (except for returning >>> an error when unnecessary). >>> >>> Wouldn't that be possible for "min" and similar functions >>> that can tell what the user wants, and just do it? (rather than >>> returning an error that doesn't seem necessary or useful) >>> > -tim >>> > >>> --- >>> Thanks for the explanations! As you point out, vim, it >>> seems, could do the right thing while remaining functionally >>> compatible with older vim script. >>> >>> -Linda >>> >>> -- >>> -- >>> You received this message from the "vim_use" maillist. >>> Do not top-post! Type your reply below the text you are replying to. >>> For more information, visit http://www.vim.org/maillist.php >>> >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "vim_use" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/vim_use/5FF6110E.7050102%40tlinx.org. >>> >> >> >> -- >> >> Salman >> >> I, too, shall something make and glory in the making. >> >> -- >> -- >> You received this message from the "vim_use" maillist. >> Do not top-post! Type your reply below the text you are replying to. >> For more information, visit http://www.vim.org/maillist.php >> >> --- >> You received this message because you are subscribed to the Google Groups >> "vim_use" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/vim_use/CANuxnEdT5fcqbQc5v8o2h8RiPrwqSgm9ew5jKyBxNBGo%3DiBo9g%40mail.gmail.com >> <https://groups.google.com/d/msgid/vim_use/CANuxnEdT5fcqbQc5v8o2h8RiPrwqSgm9ew5jKyBxNBGo%3DiBo9g%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > -- > You received this message from the "vim_use" maillist. > Do not top-post! Type your reply below the text you are replying to. > For more information, visit http://www.vim.org/maillist.php > > --- > You received this message because you are subscribed to the Google Groups > "vim_use" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/vim_use/CADAJKhBiO2KacvOiZYpGi6jW0hKfhcPawsKUdJe0diqRZ80UzQ%40mail.gmail.com > <https://groups.google.com/d/msgid/vim_use/CADAJKhBiO2KacvOiZYpGi6jW0hKfhcPawsKUdJe0diqRZ80UzQ%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_use" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/CANuxnEeH0iDyQJPV2BKxcw3LSUX7dz8%2BiGtJ0Ci2TpztQhiO7Q%40mail.gmail.com.
