首页 > 解决方案 > 在计划程序中需要帮助不知道如何创建它

问题描述

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

标签: scheme

解决方案


两个主要的语法问题是(lst val1)and(lst)尝试lst作为函数调用,并且不else应该有条件 -cond形式是

(cond (condition1 expression1)
      (condition2 expression2)
      (else       expression))

(equal? val2 lst)说“val2等于整个列表lst”。这根本不符合逻辑。

(equal? val2 (cadr lst))说“val2等于列表的第二个元素lst”。你不需要关心第二个元素。

第一个元素是car。尾巴是cdr。(许多使用firstand rest,这是更现代的名称。)

您非常接近解决方案,所以我将给您一个结构:

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

推荐阅读