在计划程序中需要帮助将不知道如何创建它

时间:2018-10-22 12:22:20

标签: scheme

编写一个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)))))

1 个答案:

答案 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。 (许多使用cdrfirst,它们是更现代的名称。)

您已经很接近解决方案了,所以我只给您一个结构:

  • 如果列表为空,则结果为空列表。
  • 如果列表中的第一个元素是您要替换的元素,则将rest的新值添加到列表其余部分的递归结果上。
  • 否则,将现有值cons递归到列表其余部分的递归结果上。