【发布时间】:2020-07-17 10:39:15
【问题描述】:
我正在尝试在方案中创建一个过程,用另一个元素替换列表中的某个元素
(define (replace var player list)
(if (null? list)
'()
(if (list? (car list))
(cons (replace var player (car list))
(replace var player (cdr list))
(if (equal? var (car list))
(cons player (replace var player (cdr list)))
(cons (car list) (replace var player (cdr list)))
))))
目前该过程不替换任何元素。 这是输入列表
'(q w (e r (t x)) y u i (o (x)) p x a s d)
我想将该列表中的“x”元素替换为“y”。
这是想要的输出
'(q w (e r (t y)) y u i (o (y)) p y a s d)
我们已经尝试过
(replace_by 'x 'y '(q w (e r (t x)) y u i (o (x)) p x a s d)
但它似乎不起作用
【问题讨论】:
-
这段代码似乎可以正常工作,至少对于给定的列表来说是这样(尽管我确信它的结构可以更好)。缺少 ')' 来关闭第一个
cons即 (replace var player (cdr list)) ) 并且没有理由将replace_by放在代码中,只有replace需要 -
超级复制警报
-
@ghosh -- 这对我来说看起来不是一个好的欺骗候选人。在这里,OP 有一个小问题导致代码无法正常工作。我在回答中解决了这个问题:放错位置的括号没有导致输出。但更糟糕的是,你提出的骗局:唯一答案中描述的算法不会下降到嵌套列表,这里的 OP 代码会这样做。
-
@exnihilo np 你可能是对的,但这个问题是如此常见/基本/琐碎,99.9% 的人已经在某个地方得到了回答,很可能甚至在网站上......
-
@ghosh - 这基本上是一个调试问题,找到另一个缺少括号的问题应该很容易,但根本没有用。但是 OP 代码有一个更深层次的通用性问题,因为它能够在括号固定时替换嵌套列表中的 atom 元素,但它不能替换 list 元素(甚至没有空列表元素
'())。您也许可以为这个更罕见的问题找到一个骗子,但 IAC 建议的骗子绝对没有解决这里的任何问题。