实现一个过程remove,它接受一个列表并返回一个新列表,其中所有项目实例都从lst中删除

问题描述 投票:0回答:1
(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

scheme racket
1个回答
0
投票

您不需要循环遍历

remove
中的列表。正如说明所说:

提示:您可能会发现 filter-lst 过程很有用。

因此,您只需编写一个过程,对于与

item
不同的值返回 true,并将其作为
fn
参数传递给
filter-lst

(define (remove item lst))
  (filter-lst (lambda (x) (not (= x item))) lst))
© www.soinside.com 2019 - 2024. All rights reserved.