【发布时间】:2013-10-04 00:34:20
【问题描述】:
我正在努力进行练习考试的三个功能。
一个函数,它接受一个谓词“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))))
我一定错过了柯里化的一些基本方面,因为我觉得这些操作应该很简单..
【问题讨论】:
-
你需要知道
set的接口才能回答这个问题。 -
所描述的操作似乎都不需要柯里化。每个中的柯里化参数是什么?
-
@AdamBurry 的要求很重要。这是否使用您在之前的问题representing sets with lambda functions 中提到的相同集合表示,其中集合由其特征函数表示,给定潜在元素,如果元素在集合中则返回 true,否则返回 false。例如,
(lambda (x) (> x 2))是大于二的数字集合,even?是偶数集合? -
如果您仍在使用集合由其特征函数表示的表示,我不明白您如何做到这一点。如果
f表示某个集合,那么当且仅当x在集合中时(f x)为真,您仍然无法列出集合的所有元素(实际上,集合可能有无限多个元素)。如果你只想要一个“集合”,它的元素是f的元素,也满足一些谓词p,那么,由于p也代表一个集合,你不能使用f的“交集”和p?也就是说,你不能使用(lambda (x) (and (f x) (p x)))吗?