首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用rplaca函数

使用rplaca函数
EN

Stack Overflow用户
提问于 2012-11-22 17:16:55
回答 1查看 417关注 0票数 1

我正在尝试用另一个符号示例替换列表中的符号:(将'the 'a‘(猫坐在席子上)替换为==> (猫坐在席子上)),所以" the“应该用"a”代替。

这是我的代码,

代码语言:javascript
复制
(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中编译它时,会出现以下错误

代码语言:javascript
复制
Error: Function position must contain a symbol or lambda expression: (RPLACA LIST NEW-ITEM)
[condition type: PARSE-ERROR]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 23:05:33

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

  • item不是一个函数,因此您不应该使用parentheses
  • your递归调用将其括起来。递归调用应该重复与原始调用相同的两个前两个参数
  • 递归调用在所有情况下都应该进行
  • 您在rplaca调用周围有额外的括号,这是报告的错误

的实际原因

代码语言:javascript
复制
(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)

此外,正如注释中所指出的,不习惯将文字静音;您可能希望构建一个新的列表,例如:

代码语言:javascript
复制
(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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13509264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档