如何使用未知数量的变量定义函数



我是第一次学习Lisp,我正在研究一个简单的函数,该函数可以附加两个列表。当我测试预定义的append的函数时,我注意到我可以给它两个以上的列表,我想知道自己该怎么做?所以我想知道如何在Lisp中生成一个包含未知数量变量的函数?

您可以使用点列表为可选参数定义函数。所有可选参数都将作为列表传递给函数。

例如,此函数采用一个强制参数a0和任意数量的可选参数作为a-rest列表:

(define (take-many a0 . a-rest)
a-rest)

现在,当你称之为:

(take-many 1 20 333)
=> (20 333)

您可以看到可选的second和thind参数作为列表可用。要访问它们,您可以使用标准列表访问器,如carcdrnth等。

lambda也是如此。

您可以在Dr Racket:3.8过程表达式:lambda和lambda大小写(查找rest-id(上阅读更多关于它的信息。

使用&restlambda列表关键字:

(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((

相关内容

  • 没有找到相关文章

最新更新