gpt4 book ai didi

lisp - 如何在 lisp 函数中传递变量和列表

转载 作者:行者123 更新时间:2023-12-05 09:26:26 24 4
gpt4 key购买 nike

如果这是一个初学者问题,我们深表歉意。欢迎尖锐的评论。我正在学习 LISP 并得到了如下片段。它检查列表中的常量值并仅返回大于它的元素。

(defun greaterthanX (l)
(if l
(if (> (car l) 5)
(cons (car l) (greaterthanX (cdr l)))
(greaterthanX (cdr l))
)
)
)

(print(greaterthanx '(1 2 3 4 5 6 7 8 3)))

Output : (6 7 8)

我的问题是如何在递归函数中传递变量并修改它而不是传递常量值(即上述情况下的 5)?

我正在寻找这样的东西:

(defun greaterthanX (x l)
(if l
(if (> (car l) x)
(cons (car l) (greaterthanX (cdr l)))
(greaterthanX (cdr l))
)
)
)

(print(greaterthanx '5 '(1 2 3 4 5 6 7 8 3)))

最佳答案

您还可以在对 greaterthanX 的两次递归调用中传递 x 值:

CL-USER 5 > (defun greater-than-x (x l)
(if (consp l)
(if (> (first l) x)
(cons (first l)
(greater-than-x x (rest l)))
(greater-than-x x (rest l)))))
GREATER-THAN-X

CL-USER 6 > (print (greater-than-x 5 '(1 2 3 4 5 6 7 8 3)))

(6 7 8) ; printed
(6 7 8) ; repl output

关于lisp - 如何在 lisp 函数中传递变量和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73963225/

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