(define (filter-lst fn lst)
'YOUR-CODE-HERE
(if (null? lst)
lst
(if (fn (car lst))
(cons (car lst)
(filter-lst fn (cdr lst))
)
(filter-lst fn (cdr lst))
)
)
)
实现一个过程remove,它接受一个列表并返回一个新列表,其中所有item实例都从lst中删除。您可能会假设该列表仅包含数字并且不会包含嵌套列表。
提示:您可能会发现 filter-lst 过程很有用。
我的代码如下:
(define (remove item lst)
'YOUR-CODE-HERE
(cond ((null? lst) '())
(equal? item (car (lst))(remove item (cdr lst)))
(else (cons (car lst)(remove item (cdr (lst)))))
)
)
;;; Tests
(remove 3 null)
; expect ()
(remove 3 '(1 3 5))
; expect (1 5)
(remove 5 '(5 3 5 5 1 4 5 4))
; expect (3 1 4 4)
我的代码出错了!
application: not a procedure;
expected a procedure that can be applied to arguments
given: '(1 3 5)
有人可以帮我解决吗orz
您不需要循环遍历
remove
中的列表。正如说明所说:
提示:您可能会发现 filter-lst 过程很有用。
因此,您只需编写一个过程,对于与
item
不同的值返回 true,并将其作为 fn
参数传递给 filter-lst
。
(define (remove item lst))
(filter-lst (lambda (x) (not (= x item))) lst))