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