给定一个测试单个项目的谓词,例如positive?
,我正在尝试创建all-are
它的一个版本来测试列表的所有元素是否满足谓词
前任:
((all-are positive?) '(1 2 3 4)) => #t
((all-are even?) '(2 4 5 6 8)) => #f
all-are
应该将谓词作为参数并返回一个可以应用于元素列表的新函数
就现有过程而言,这很容易表达:andmap
-#t
如果给定谓词在应用于列表中的所有元素时,对所有元素的计算结果为 true,则返回:
(define ((all-are predicate) lst)
(andmap predicate lst))
我使用一些语法糖来返回一个咖喱过程,因为问题指出必须返回一个函数。它按预期工作:
((all-are positive?) '(1 2 3 4))
> #t
((all-are even?) '(2 4 5 6 8))
> #f
我猜你必须从头开始实施这个过程,而不是像我的解决方案那样使用现有的过程。一个很好的练习是将上面的简短版本(它展示了需要做什么的一般想法)变成只使用基本形式的更简单的东西——这可能是你的老师对你的期望。
只是试图只使用'foldr'的基础知识,代码结果是:
(define (all-are pred l)
(foldr (λ (x y)
(and y (pred x))) #t l))
尝试使用 foldr、foldl 和其他基础知识并找出必要的参数,这将是一个很好的编程实践....希望对您有所帮助!!!