辅助函数
以下是一些并不是适合任何情境中的辅助功能。看看您是否可以猜出它们的预期功能。
(fun {flip f a b} {f b a})
(fun {ghost & xs} {eval xs})
(fun {comp f g x} {f (g x)})
该flip
函数接受一个函数f
和两个参数a
和b
。然后它使得f
先处理b
而后再处理a
,这是相反的顺序。当我们想要函数仅部分计算时,这可能很有用。在我们想要通过进传递第二个参数就能够部分计算一个函数的时候,我们能够使用flip
来给我们一个新的函数,能够将最初的两个参数以相反的顺序输入。
这意味着如果要应用函数的第二个参数,只需将第一个参数应用于此函数的flip
即可。
lispy> (flip def) 1 {x}
()
lispy> x
1
lispy> def {define-one} ((flip def) 1)
()
lispy> define-one {y}
()
lispy> y
1
lispy>
我想不出这个ghost
函数的用途,但它看起来很有趣。它接受任意数量的参数并将它们作为表达式本身进行计算。所以它只是位于像鬼一样的表达式的前面,根本不与程序进行交互或改变程序的行为。如果您能想到它的用途,我很乐意倾听您的想法。
lispy> ghost + 2 2
4
comp
函数用于组合两个函数。它的输入为f
,g
以及一个传递到g
的参数。然后它将此参数应用到g
后,再把结果应用到f
当中去。这可以用于将两个函数组合成一个新函数,串联地应用两个函数。像以前一样,我们可以将它与部分计算结合起来,从简单的函数中构建复杂的函数。
例如,我们可以组合两个函数。一个否定一个数字,另一个解包一个数字列表,并用*
进行相乘。
lispy> (unpack *) {2 2}
4
lispy> - ((unpack *) {2 2})
-4
lispy> comp - (unpack *)
(\ {x} {f (g x)})
lispy> def {mul-neg} (comp - (unpack *))
()
lispy> mul-neg {2 8}
-16
lispy>
当前内容版权归 NoahDragon 译 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 NoahDragon 译 .