这是我对咖喱的函数:
(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中正确的方法,使用内置的curry
和filter-not
过程:
(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)
过滤器函数保留满足测试的元素。你必须否定你的谓语。
您可以创建一个函数,我编写如下:
(define (my-compose f g)
(lambda (x) (f (g x))))
还有你的咖喱功能:
(define (curry g)
(lambda (x) (lambda (y) (g x y))))
您可以创建一个过滤器功能(不使用过滤器)
(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)