gpt4 book ai didi

list - 向列表的最后一个索引添加值 (LISP)

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

我正在尝试将给定变量 x 添加到列表 L。这两个都是函数 ADDV 的参数。到目前为止,我的代码如下:

(defun addV(L x)
(cond
((eq L nil) nil)
((eq (cdr L) nil) (list(+(car L) x)))
(+ x (first(last L)))
(butlast L)
(append L x) ) )

带参数

L = '(1 2 3 4)
x = 2

当语句:(+ x (first(last L)))) 被求值时,它的值为 4。最终目标应该是L = '(1 2 3 6)

我不确定我做错了什么。任何帮助将不胜感激。谢谢。

最佳答案

您的代码格式错误。重新缩进,我们得到

(defun addV(L x)
(cond
((eq L nil)
nil)
((eq (cdr L) nil)
(list (+ (car L) x)))
(+
x
(first (last L)))
(butlast
L)
(append
L
x) ) )

你现在看到问题了吗?

因为(not +)NILCOND中的对应子句形式被输入。它的主体形式(x(first (last L)))被评估为效果,但没有效果。然后返回最后一个表单的值。

你显然希望它成为

(defun addV (L x)
(cond
((eq L nil)
nil)
((eq (cdr L) nil)
(list (+ (car L) x)))
(T
(append
(butlast L)
(list (+ x (first (last L))))))))

巧合的是,第二个子句完全没有必要,可以忽略不计

(defun addV (L x)
(if (not (null L))
(append (butlast L)
(list (+ x (first (last L)))))))

关于list - 向列表的最后一个索引添加值 (LISP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158751/

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