【问题标题】:Filter-Out function in SchemeScheme中的Filter-Out函数
【发布时间】:2013-12-11 20:41:31
【问题描述】:

我需要创建一个在 Scheme 中过滤掉谓词的函数。例如(filter-out number? '(a 2 #f b 7)):输出将是(a #f b)

我拥有的函数返回一个过滤掉的列表。我怎样才能改变它以获得我需要的东西?谢谢

(define (filter pred lst)
  (reverse (filter-help pred lst '())))

(define (filter-help pred lst res)
  (cond ((null? lst) res)
        ((pred (car lst)) 
           (filter-help pred (cdr lst)  (cons (car lst) res)))
        (else 
           (filter-help pred (cdr lst)  res))))

【问题讨论】:

  • 错字*抱歉。输出应该是 (a #f b)

标签: recursion filter functional-programming scheme predicate


【解决方案1】:

如果您只是在 filter-help 的一行中否定谓词(并按预期将名称 filter 更改为 filter-out),您的函数就可以工作:

(not (pred (car lst)))

而不是

((pred (car lst))

虽然您可以通过使用带有 lambda 函数的内置 filter 来更简洁地编写此代码:

(define (alt-filter-out pred lst)
        (filter (lambda (x) (not (pred x))) lst))

希望这会有所帮助!

【讨论】:

  • (filter (complement pred) lst)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 2011-03-08
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多