gpt4 book ai didi

lisp - 函数的意外结果(递归)

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:25 25 4
gpt4 key购买 nike

我需要实现根据传递给函数的参数创建列表的函数。

这是我的代码:

(defun lstbuilder (&rest args)
(if (eq (car args) NIL)
NIL
(cons (car args)
(lstbuilder (cdr args)))))

此功能无法正常工作。结果:

(lstbuilder 'a 'b 'c 'd 'e) ;expected (a b c d e)
(a (b c d e)) ;result

最佳答案

风格

  • 请使用标准的 Lisp 格式。使用编辑器将帮助您缩进 Lisp 代码。

  • 不要将括号单独放在一行中。这只会浪费空间而没有任何好处。

  • 较长的名称在单词之间加一个 -:list-builder

  • 不要使用 carcdr 进行列表操作。使用firstrest

  • 列表测试结束是endp

例子:

(defun list-builder (&rest args)
(if (endp args)
nil
(cons (first args)
(apply #'list-builder (rest args)))))

由于 args 变量已经是一个列表,我们可以直接复制它:

(defun list-builder (&rest args)
(copy-list args))

或者我们可以重用 list 函数,它已经创建了一个参数列表:

(setf (symbol-function 'list-builder)
#'list)

关于lisp - 函数的意外结果(递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407466/

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