编写一个Scheme函数,该函数将两个原子和一个列表作为参数,并返回与参数列表相同的列表,只是列表中第一个给定原子的所有出现都替换为第二个给定原子。
(define(swap val1 val2 lst)
(cond ((null? lst) (lst val1))
((equal? val2 lst) (lst))
(else(equal? val2 (cadr lst)) (swap val1 val2 (cadr lst)))))
答案 0 :(得分:0)
两个主要的语法问题是(lst val1)
和(lst)
试图调用lst
作为一个函数,而else
不应有条件-{{1 }}形式是
cond
(cond (condition1 expression1)
(condition2 expression2)
(else expression))
说“ (equal? val2 lst)
等于整个列表val2
”。这没有道理。
lst
说“ (equal? val2 (cadr lst))
等于列表val2
的第二个元素”。您无需关心第二个元素。
第一个元素是lst
。尾巴为car
。 (许多使用cdr
和first
,它们是更现代的名称。)
您已经很接近解决方案了,所以我只给您一个结构:
rest
的新值添加到列表其余部分的递归结果上。cons
递归到列表其余部分的递归结果上。