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)))))
解决方案
两个主要的语法问题是(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
。(许多使用first
and rest
,这是更现代的名称。)
您非常接近解决方案,所以我将给您一个结构:
- 如果列表为空,则结果为空列表。
- 如果列表的第一个元素是您要替换的元素,
cons
则将新值添加到列表其余部分的递归结果中。 - 否则,
cons
将现有值放到列表其余部分的递归结果上。
推荐阅读
- windows - 如何仅重命名子文件夹而不更改父文件夹名称
- java - 将 MongoDB 查询转换为 Spring Repository
- javascript - 如何在 3d 瓷砖中进行耕作
- postgresql - 如何在 text[] 列数据类型上使用 in 运算符?
- javascript - 错误:语法错误,无法识别的表达式:#whitelist_end option[value*= + value + ]
- reactjs - React Native 中的连接变量
- java - Java 中的 feed_dict 等价物
- asynchronous - 异步等待数据库需要时间
- python - 记录错误,运行记录器时参数错误TypeError
- android - 如何在不使用外部包的情况下添加/获取日历事件