Scheme (如果f lst,则删除)方案上的功能

Scheme (如果f lst,则删除)方案上的功能,scheme,Scheme,删除所有x lst函数,该函数删除了lst中已删除的任何内容 等于x。对于这个问题,编写scheme函数remove if f lst,该函数返回包含所有元素的列表,其中f x为真 我有一个简单的删除所有代码的方法 (define (remove-all x ls) (if (null? ls) '() (if (eq? x (car ls)) (remove-all x (cdr ls)) (cons (car ls)

删除所有x lst函数,该函数删除了lst中已删除的任何内容 等于x。对于这个问题,编写scheme函数remove if f lst,该函数返回包含所有元素的列表,其中f x为真

我有一个简单的删除所有代码的方法

(define (remove-all x ls)
  (if (null? ls)
      '()
      (if (eq? x (car ls))
          (remove-all x (cdr ls))
          (cons (car ls)
                (remove-all x (cdr ls))))))

但是我如何修改它,使它接受一个函数并返回列表,其中返回true的元素已被删除?

只需将比较谓词作为参数传递,并替换硬编码的eq?使用谓词:

(define (remove-if pred ls)
  (if (null? ls)
      '()
      (if (pred (car ls))
          (remove-if pred (cdr ls))
          (cons (car ls)
                (remove-if pred (cdr ls))))))
或者更好,在球拍中使用:

(filter-not even? '(1 2 3 4 5 6))
=> '(1 3 5)

如果您阅读以下内容,那就太好了: