0

我正在努力进行练习考试的三个功能。

一个函数,它接受一个谓词“pred”和一个集合“x”,并返回集合中所有元素的谓词是否为真。

我在尝试什么:

(define (all? pred x)
  (lambda (t) 
    (equal? (pred t) x)))

由于 pred t 返回谓词为真的 x 的子集,我试图将它与原始集合进行比较......这显然不是这样做的方法。

一个函数,它接受一个操作“op”和一个集合“x”并返回一个新集合,其中基本上 op 函数已映射到整个集合。基本上相当于地图,所以你会认为我不应该在这方面寻求帮助......

我正在尝试什么:

(define (map op x)
  (lambda (t) 
    (map (op t))))

我一定错过了柯里化的一些基本方面,因为我觉得这些操作应该很简单..

4

1 回答 1

1

所以你正在尝试做类似andmap的事情

您可以定义一个评估列表的函数,以查看它们的所有元素是否都是 #t 值。

(define full-true?
  (λ (lst)
   (if (empty? lst) #t
     (if (car lst) (full-true? (cdr lst))
         (car lst)))
))

然后,您的主要功能是:

(define for-all?
 (lambda 
   (pred lst-of-items)
    (full-true? (map (lambda (x) (pred x)) lst-of-items))
))
于 2013-10-17T19:13:38.280 回答