Scheme (如果f lst,则删除)方案上的功能
删除所有x lst函数,该函数删除了lst中已删除的任何内容 等于x。对于这个问题,编写scheme函数remove if f lst,该函数返回包含所有元素的列表,其中f x为真 我有一个简单的删除所有代码的方法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)
(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)
如果您阅读以下内容,那就太好了: