gpt4 book ai didi

LISP - 替换列表中的值

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

我有一个 nils 列表 (NIL NIL NIL NIL) 我需要添加两个 X 来代替前两个 NIL,所以它变成了 (X X NIL NIL) .

我有以下代码:

(cons x (cons x (cons (cdr '(NIL NIL NIL NIL))nil)))

但是这样它返回

(X X (NIL NIL))

那些括号需要删除,我不知道如何删除。有人能帮我吗?谢谢

最佳答案

如果您将一个列表传递给 cons 的第一个参数,那么您就是在创建一个嵌套 列表。首先假设我们制作了您的初始列表和符号 x 变量:

(defparameter *nils* '(nil nil nil nil))
*nils* ; ==> (nil nil nil nil)

(defparameter *x* 'x)
*x* ; ==> x

那么我们如何先去掉这两个。好吧,我们可以用 (cdr *nils*) 删除一个,这意味着我们可以做两次:

(cdr (cdr *nils*))
; ==> (nil nil)

实际上不止一个 carcdr 访问器有多达 5 种组合的速记。速记只是以 c 开头,然后执行 a/d,并以 r 结尾,如下所示:

(cddr *nils*)
; ==> (nil nil)

亲爱的,我们如何在它前面添加 *x*cons 定义为在第二个参数前面创建一个元素,因此 (cons *x* (cddr *nils*)) 将 make(x nil nil)。同样,如果您希望在其前面有另一个x`,您可以对第一个结果执行相同的操作:

(cons *x* (cons *x* (cddr *nils*)))
; ==> (x x nil nil)

使用 list* 就像嵌套的 cons,最后有一个尾部。因此上面的代码可以替换为:

(list* *x* *x* (cddr *nils*))
; ==> (x x nil nil)

现在用存储为值的表达式替换变量(替换方法):

(list* 'x 'x (cddr '(nil nil nil nil)))
; ==> (x x nil nil)

关于LISP - 替换列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47562288/

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