gpt4 book ai didi

lisp - 使用 rplaca 函数

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

我正在尝试用另一个符号示例替换列表中的符号:(替换'the'a'(猫坐在垫子上))==>(一只猫坐在垫子上)所以“the”应该换成“a”

这是我的代码,

(defun replace (item new-item list)
(cond ((null list)
list
)
((eq (first list) (item))
((rplaca list new-item)
(replace (rest list))))
))
;rplace replace the first of the cons with obj
;(defparameter *some-list* (list* 'one 'two 'three 'four)) => *some-list*
;*some-list* => (ONE TWO THREE . FOUR)
;(rplaca *some-list* 'uno) => (UNO TWO THREE . FOUR)

当我在 aligra 中编译时出现以下错误

Error: Function position must contain a symbol or lambda expression: (RPLACA LIST NEW-ITEM)
[condition type: PARSE-ERROR]

我不明白为什么会出现此错误,因为 rplace 函数有两个参数。

最佳答案

您的代码中有几个不同的错误:

  • item 不是一个函数,所以你不应该用括号将它括起来
  • 您的递归调用应重复与原始调用相同的两个第一个参数
  • 在所有情况下都应该进行递归调用(而不仅仅是在更换汽车时)
  • rplaca 调用周围有额外的括号,这是报告错误的实际原因
(defun replace (item new-item list)
(cond ((null list)
list)
((eq (first list) item)
(rplaca list new-item)
(replace item new-item (rest list)))
(t
(replace item new-item (rest list)))))

(setq l '(a cat sat on a mat))
(replace 'a 'the l)
l ;; -> (the cat sat on the mat)

此外,正如评论中所指出的,不习惯将文字静音;您可能想要构建一个新列表,例如:

(defun replace-1 (item new-item list)
(mapcar (lambda (car)
(if (eq car item)
new-item
car))
list))

(replace-1 'a 'the '(a cat sat on a mat))
;; -> (the cat sat on the mat)

关于lisp - 使用 rplaca 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13509264/

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