筛选数字列表



这是我对咖喱的函数:

(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中正确的方法,使用内置的curryfilter-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)

最新更新