通过数字列表过滤
Filtering through a list of numbers
这是我的咖喱函数:
(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)
我想获得 (list 2 3) 但不知道如何获得。有人可以帮忙吗?
过滤函数保留满足测试的元素。你必须否定你的谓词。
试试这个 - 在 Racket 中使用内置的 curry
and 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)
您可以创建一个函数 my-compose 如下:
(define (my-compose f g)
(lambda (x) (f (g x))))
还有你的 curry 函数:
(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)
这是我的咖喱函数:
(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)
我想获得 (list 2 3) 但不知道如何获得。有人可以帮忙吗?
过滤函数保留满足测试的元素。你必须否定你的谓词。
试试这个 - 在 Racket 中使用内置的 curry
and 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)
您可以创建一个函数 my-compose 如下:
(define (my-compose f g)
(lambda (x) (f (g x))))
还有你的 curry 函数:
(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)