Scheme 咖喱使用方案

Scheme 咖喱使用方案,scheme,racket,Scheme,Racket,我有三个功能的练习考试,我正在努力 一种函数,它接受谓词“pred”和集合“x”,并返回集合中所有元素的谓词是否为真 我想说的是: (define (all? pred x) (lambda (t) (equal? (pred t) x))) 因为pred t返回谓词为true的x的子集,所以我试图将其与原始集合进行比较。。。这显然不是解决问题的办法 一种函数,它接受一个操作“op”和一个集合“x”,并返回一个新集合,其中op函数基本上已映射到整个集合。基本上相当于地图,所以你会

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

一种函数,它接受谓词“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))))

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

所以你正在尝试

您可以定义一个函数,对列表求值以查看其所有元素是否都是#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))
))

要回答此问题,您需要知道
set
的接口。所描述的操作似乎都不需要curry。每个参数中的curried参数是什么?@AdamBurry所问的问题很重要。这是否使用了您在前面的问题中提到的相同的集合表示,其中集合由其特征函数表示,该函数返回给定的潜在元素,如果元素在集合中,则返回true,否则返回false。例如,
(lambda(x)(>x2))
是大于2的数字集,
是偶数集?
是偶数集?如果您仍然使用该表示法,其中集合由其特征函数表示,我看不出您如何做到这一点。如果
f
表示某个集合,那么当且仅当
x
在集合中时,
(f x)
才为真,您仍然无法列出集合的所有元素(实际上,集合可能有无限多个元素)。如果你只想要一个“集合”,它的元素是
f
的元素,也满足一些谓词
p
,那么既然
p
也代表一个集合,你就不能使用
f
p
的“交集”吗?例如,您不能使用
(lambda(x)(和(fx)(px))