通过数字列表过滤

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)