gpt4 book ai didi

lisp - 在 Element2 之前插入 Element1

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

我有两个元素和一个列表。每次第一个元素出现时,我都必须在给定列表的第一级中的第一个元素之前插入第二个元素。

递归版本:

(defun INSERT-ELEM (E1 E2 L)
(cond ((null L) NIL)
((equal E1 (car L)) (cons E2 (INSERT-ELEM E1 E2 (cdr L))))
((equal E2 (car L)) (cons E1 (INSERT-ELEM E1 E2 (cdr L))))
(t (cons (car L) (INSERT-ELEM E1 E2 (cdr L))))))

但是有一点不对,它在改变位置,而不是在 E1 前面插入 E2。有人可以帮助我吗?

最佳答案

有两个问题。

首先,您只应在 E1 之前插入 E2。但是行:

   ((equal E2  (car L))  (cons E1 (INSERT-ELEM  E1 E2 (cdr L))))

也在 E2 之前插入 E1。你应该删除它。

第二个问题是,当您进行递归调用时,您没有在结果中包含当前元素。因此,您要删除所有 E1 元素。将递归调用更改为:

(list* e2 (car l) (insert-elem e1 e2 (cdr l)))

工作版本是:

(defun insert-elem (e1 e2 l)
(cond ((null l) nil)
((equal e1 (car l)) (list* e2 (car l) (insert-elem e1 e2 (cdr l))))
(t (cons (car l) (insert-elem e1 e2 (cdr l))))))

(insert-elem 'a 'b '(1 2 3 a c b d a b e))
=> (1 2 3 b a c b d b a b e)

关于lisp - 在 Element2 之前插入 Element1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44730084/

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