使用Scheme进行Currying

时间:2013-10-04 00:34:21

标签: scheme racket

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

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

我在尝试什么:

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

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

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

我在尝试什么:

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

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

1 个答案:

答案 0 :(得分: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))
))