gpt4 book ai didi

list - 替换列表中第一次出现的元素

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

我正在写一个函数 replaceFirst(X Y L)它仅将列表 L 中第一次出现的 X 替换为 Y。

这是我到目前为止所做的:

(define replaceFirst( lambda (X Y L)
(cond
( (null? L) '() )
( (equal? (car L) X) (set! Y (cdr L)) )
( #t (replaceFirst X Y (cdr L)) )
)
))

这给出了 In procedure setter: Wrong type argument in position 1: #<procedure car (_)> 的错误

编辑

我想出了一个解决方案:

首先,如果X是第一个元素,而不是使用 set! (我不熟悉),我cons Y到不包括 X 的列表.

否则,我cons列表的第一个元素,函数在列表的其余部分递归调用。

(define replaceFirst( lambda (X Y L)
(cond
( (null? L) '() )
( (equal? (car L) X) (cons Y (cdr L)) )
( #t (cons (car L) (replaceFirst X Y (cdr L))) )
)
))

最佳答案

在你的条款中:

( (equal? (car L) X)    (set! Y (cdr L)) )

函数实际返回什么?如果 Y 应该是 X 的替代品,一旦您知道 (car L) 等于 X,如何将变量 Y 的值设置为列表的其余部分为您做什么?

您的更新没问题,但请注意,它返回一个像 L 一样的 列表,但其中第一次出现的 X 已被 Y 替换。这不是同一个列表。这可能没问题,但在您第一次尝试时使用 set! 表明您可能想要修改作为输入传入的列表。

关于list - 替换列表中第一次出现的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36335040/

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