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)