我是第一次学习Lisp,我正在研究一个简单的函数,该函数可以附加两个列表。当我测试预定义的append
的函数时,我注意到我可以给它两个以上的列表,我想知道自己该怎么做?所以我想知道如何在Lisp中生成一个包含未知数量变量的函数?
您可以使用点列表为可选参数定义函数。所有可选参数都将作为列表传递给函数。
例如,此函数采用一个强制参数a0
和任意数量的可选参数作为a-rest
列表:
(define (take-many a0 . a-rest)
a-rest)
现在,当你称之为:
(take-many 1 20 333)
=> (20 333)
您可以看到可选的second和thind参数作为列表可用。要访问它们,您可以使用标准列表访问器,如car
、cdr
、nth
等。
lambda
也是如此。
您可以在Dr Racket:3.8过程表达式:lambda和lambda大小写(查找rest-id
(上阅读更多关于它的信息。
使用&rest
lambda列表关键字:
(defun test-rest (a &rest b)
(format t "1st argument: ~S; 2nd argument: ~S; other arguments: ~S~%"
a (first b) (rest b)))
现在(test-rest 1 2 3 4)
打印
第一个参数:1;第二个论点:2;其他论点:(34(
如果您对Scheme特别感兴趣,可以使用arglist:
(define (test-rest a . b)
(display (list (list "first" a)
(list "others" b))))
现在(test-rest 1 2 3 4)
将打印
((前1((其他(2 3 4((