【发布时间】:2021-11-01 23:07:56
【问题描述】:
我有 3 个函数 union、maximum 和 maximum_of_two。 Union 接受两个列表并将它们组合为一个(此功能已经过测试并且有效)。最大应该返回给定列表中的最大元素,但无论我是通过最大的_of_two还是单独调用它,都只返回#f。任何帮助将不胜感激。
(define (union l1 l2)
(cond (
(null? l1) l2)
((cons (car l1) (union (cdr l1) l2)))
)
)
(define (largest x a_list)
(cond
((null? a_list) x)
((< x (car a_list)) (= x (car a_list)))
(else (largest x (cdr a_list)))
)
)
(define (largest_of_two l1 l2)
(largest (car l1) (cdr (union l1 l2)))
)
(display(largest_of_two '(19 30 13 29 38) '(1 50 5 20 41)))
【问题讨论】:
-
错误在
((< x (car a-list)) (= x (car a-list))),应该是((< x (car a-list)) (largest (car a-list) (cdr a-list)))。 -
“给定列表中的最大元素”暗示了一个参数 - 一个列表 - 而不是两个。随着这种变化,这变成了两个过程的微不足道的应用。
-
我建议您习惯于传统的括号放置。您的方法建议了一个不存在的块结构。 (在我放弃“C 大括号”习惯之前,我个人对 Lisps 有很多问题。)
标签: scheme