(42) 这让我陷入了困境;到目前为止,我一直假设形-6ren">
gpt4 book ai didi

lambda - 何时使用带有 "bare"形式参数的 lambda 定义?

转载 作者:行者123 更新时间:2023-12-04 07:57:45 26 4
gpt4 key购买 nike

我现在正在学习 Guile Scheme,在文档中我突然遇到了以下结构:

((lambda args (display args)) 42)
=> (42)

这让我陷入了困境;到目前为止,我一直假设形式参数总是包含在一个列表中:
((lambda (args) (display args)) 42)
=> 42

我想知道何时使用此变体,以及它与可变数量参数的点表示法有何不同。具体来说,以下两种变体有什么区别:
((lambda args (display args)) 1 2 3)     => (1 2 3)
((lambda (. args) (display args)) 1 2 3) => (1 2 3)

是否存在差异——也许对于更复杂的例子——我需要注意,是否有任何理由更喜欢一个?

最佳答案

不同之处在于此版本接收一个名为 args 的参数。 ,对于您确切知道 lambda 预期的实际参数数量的情况很有用形式:

(lambda (args) (display args))

这个版本接收一个(可能是空的)参数列表,称为 args ,当您期望 lambda 的参数数量可变时很有用形式:
(lambda args (display args))

以下两个版本应该没有区别,但并非所有解释器都会接受第二个版本,因为它缺少点之前的部分(因此应避免使用):
(lambda args (display args))
(lambda (. args) (display args))

当您要指定 lambda 时,以下版本很有用表单具有一个或多个强制参数(点左侧的符号)和零个或多个可选参数的列表(点右侧的单个符号):
(lambda (mandadory1 mandatory2 . optional) (display mandatory1))

关于lambda - 何时使用带有 "bare"形式参数的 lambda 定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8819948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com