【发布时间】:2023-03-14 03:55:01
【问题描述】:
(lambda (head . rest)
(...))
我在尝试学习一些方案时在网上遇到了这段代码,但我找不到任何有用的解释。
这是什么意思?是像 ML 中的某种模式匹配吗? (顺便说一句,他们只将此 lambda 应用于一个参数!)
【问题讨论】:
(lambda (head . rest)
(...))
我在尝试学习一些方案时在网上遇到了这段代码,但我找不到任何有用的解释。
这是什么意思?是像 ML 中的某种模式匹配吗? (顺便说一句,他们只将此 lambda 应用于一个参数!)
【问题讨论】:
在这个过程中:
(lambda (arg . args)
(...))
语法表明lambda 表单需要一个绑定到名称arg 的强制参数和一个绑定到名称args 的包含零个或多个元素(可变数量的参数)的列表。这是variadic function 的示例。
同样的语法可以用于命名过程,注意任意数量的参数可以被指定为强制的,然后其余的被认为是可选的;看看这个例子:
(define (test arg . args)
(apply + arg args))
(test) ; will cause an error, at least one argument is expected
(test 10) ; returns 10
(test 10 4) ; returns 14
(test 10 4 2) ; returns 16
【讨论】:
这是»点尾表示法«。它允许您将任意数量的参数传递给函数。如需解释,请考虑 SICP, exercise 2.20(请向下滚动)。
【讨论】: