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