我正在编写一个函数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
到列表中除{{1} }}。
否则,我X
列表的第一个元素,在列表的其余部分递归调用该函数。
cons
答案 0 :(得分:0)
在你的条款中:
( (equal? (car L) X) (set! Y (cdr L)) )
该功能实际上返回了什么?如果Y应该是X的替代品,一旦你知道(车辆L)等于 X ,那么将变量Y的值设置为什么列表的其余部分适合您吗?
您的更新很好,但请注意它会返回一个像