定义在球拍中给出谓词的过程

时间:2012-10-11 02:18:26

标签: scheme racket

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

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

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

2 个答案:

答案 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和其他基础知识并找出必要的参数,这将是一个很好的编程实践....希望它有所帮助!!!