我有一个任务和一个参数列表。我想将任务应用于参数列表。是通过使用字符串而不是任务连接来实现这一目的的唯一方法吗?基本上,我正在寻找其他语言中的apply
等价物。
答案 0 :(得分:2)
我再次遇到这个问题,实际上找到了解决方案!
to-report listify-task [ tsk num-args ]
let args (reduce word n-values num-args [ (word " (item " ? " ?)") ])
report runresult (word "task [ (runresult tsk " args ") ]")
end
这会将记者任务从带有多个参数的事件转换为带有列表的事件。你这样使用它:
observer> show (runresult (listify-task task [?1 + ?2] 2) [4 5])
observer: 9
apply
可以在此基础上实现,如:
to-report apply [ tsk args ]
report (runresult (listify-task tsk length args) args)
end
虽然效率有点低。最好存储listify-task
的结果以及任何需要的运行。
它基本上创建了以下形式的任务:task [ (runresult tsk item 0 ? item 1 ? ...)]
。
答案 1 :(得分:1)
无法完成(扩展名除外)。
实际上,我支持将此作为核心语言的补充。对于命令任务和报告任务,需要有单独的prims,就像run
和runresult
是分开的一样。
写它们(作为扩展prims,或作为核心prims)不会很难;它只涉及编写样板和胶水,而不是任何“真实”代码,并且查看run
和runresult
的实现方式将向您显示确切的操作。