0

给定一个测试单个项目的谓词,例如positive?,我正在尝试创建all-are它的一个版本来测试列表的所有元素是否满足谓词

前任:
((all-are positive?) '(1 2 3 4)) => #t
((all-are even?) '(2 4 5 6 8)) => #f

all-are应该将谓词作为参数并返回一个可以应用于元素列表的新函数

4

2 回答 2

3

就现有过程而言,这很容易表达: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

我猜你必须从头开始实施这个过程,而不是像我的解决方案那样使用现有的过程。一个很好的练习是将上面的简短版本(它展示了需要做什么的一般想法)变成只使用基本形式的更简单的东西——这可能是你的老师对你的期望。

于 2012-10-11T02:33:26.780 回答
0

只是试图只使用'foldr'的基础知识,代码结果是:

(define (all-are pred l)
   (foldr (λ (x y)
      (and y (pred x))) #t l))

尝试使用 foldr、foldl 和其他基础知识并找出必要的参数,这将是一个很好的编程实践....希望对您有所帮助!!!

于 2012-11-02T05:50:29.100 回答