Есть несколько (возможно, веских *) причин делать что-то подобное. Однажды я напишу замену printf в q ?
Самый простой способ заключается в объединении двух трюков с композицией и зачислением.
Первое зачисление - varadi c:
enlist[1;2]
1 2
Композиция затем может использоваться для объединения функций. Я думаю, что наиболее близким к тому, что вы хотите, является:
makeWrapFunc:{[f] (
callerfunc:{[f;params] f . params}f;
'[callerfunc;enlist]
}
Теперь, независимо от ранга обернутой функции, enlist объединит эти параметры в список для вас перед применением.
Я использовал этот трюк в приведенном ниже коде почти с той же целью. В моем случае я хотел выполнить некоторый ввод через существующую функцию и функцию замены и записать результаты для последующего сравнения. https://github.com/darrenarmstrong85/scientist/blob/master/lib/init.q#L97
Есть несколько способов расширить это для частичного применения, проверив количество параметров обернутой функции и привязки с помощью нулей, но я оставлю это как упражнение для читателя: -)
* Возможно, это тоже кошмар отладки. Предостережение разработчику.