Scheme 筛选数字列表
这是我的咖喱功能:Scheme 筛选数字列表,scheme,racket,Scheme,Racket,这是我的咖喱功能: (define (curry g) (lambda(x) (lambda(y) (g x y)))) 我试图使用curry函数生成一个不等于1的数字列表 到目前为止,我得到的是: (define filter-numbers ((curry filter) ((curry equal?) 1))) 但它只生成等于1的数字列表 例如(过滤器编号(列表1 2 3))->(列表1) 我想得到(清单23),但不
(define (curry g)
(lambda(x)
(lambda(y)
(g x y))))
我试图使用curry函数生成一个不等于1的数字列表
到目前为止,我得到的是:
(define filter-numbers ((curry filter)
((curry equal?) 1)))
但它只生成等于1的数字列表
例如(过滤器编号(列表1 2 3))->(列表1)
我想得到(清单23),但不知道如何得到。有人能帮忙吗?过滤功能保留满足测试要求的元素。你必须否定你的谓词。试试这个-这是Racket中正确的方法,使用内置的和过程:
(define filter-numbers
(curry filter-not (curry equal? 1)))
或者,使用curry
的实现:
(define filter-numbers
((curry filter-not)
((curry equal?) 1)))
无论哪种方式,它都能按预期工作:
(filter-numbers '(1 2 3 4 5 1 7 1))
=> '(2 3 4 5 7)
您可以按如下方式创建函数my compose:
(define (my-compose f g)
(lambda (x) (f (g x))))
还有你的咖喱功能:
(define (curry g)
(lambda (x) (lambda (y) (g x y))))
您可以创建一个过滤器函数(不使用filter not)
你为什么要定义自己的咖喱功能?
(define (filter-numbers lst)
(filter (my-compose not ( (curry =) 1)) lst))
(filter-numbers (list 1 2 1 1 3 4 2 )) => (list 2 3 4 2)