List I';我试图在racket(delete all xx elt)中编写一个函数,该函数返回一个新列表,其中删除了所有出现的elt
这是我所拥有的,但只有当elt出现在列表的开头时,它才起作用List I';我试图在racket(delete all xx elt)中编写一个函数,该函数返回一个新列表,其中删除了所有出现的elt,list,lisp,scheme,racket,List,Lisp,Scheme,Racket,这是我所拥有的,但只有当elt出现在列表的开头时,它才起作用 (define (delete-all xx elt) (cond ((null? xx) null) ((equal? elt (car xx)) (delete (cdr xx) elt)))) 您缺少了一个额外的情况:如果当前元素不是要删除的元素,会发生什么?这里是需要做什么的一般想法,我不会给你一个直接的答案,因为这看起来像是家庭作业(你应该在问题中使用家庭作业标签)。最好自己填空: (define (d
(define (delete-all xx elt)
(cond ((null? xx) null)
((equal? elt (car xx)) (delete (cdr xx) elt))))
您缺少了一个额外的情况:如果当前元素不是要删除的元素,会发生什么?这里是需要做什么的一般想法,我不会给你一个直接的答案,因为这看起来像是家庭作业(你应该在问题中使用
家庭作业标签)。最好自己填空:
(define (delete-all xx elt)
(cond ((null? xx) ; base case: empty list
null) ; return the empty list
((equal? elt (car xx)) ; current element needs to be removed
<???>) ; ignore current element and make recursive call
(else ; current element needs to be added to the list
(<???> (car xx) <???>)))) ; add current element and make recursive call
(定义(删除所有xx elt)
(cond((null?xx);基本情况:空列表
null);返回空列表
((等于elt(车辆xx));需要移除当前元件
);忽略当前元素并进行递归调用
(否则;需要将当前元素添加到列表中。)
((汽车xx));添加当前元素并进行递归调用
另外,不要在回答中调用delete
,因为这是一个递归解决方案,所以您需要调用delete all
,而是使用适当的参数来保持递归,直到达到基本情况为止。提示:关于cons
和cdr
呢?您也可以使用filter
,如果允许您使用:
(define (delete-all xx elt)
remove* xx elt)
(定义(删除所有xx elt)(cond((null?xx)null)((equal?elt(car xx))(删除所有(cdr xx)elt))(其他(cons(car xx)(删除所有(cdr xx)elt()())))感谢您的帮助,非常感谢。我从代码中找出了错误。永远不会真正知道在一个数据库中可以进行多个递归调用function@Obinna太好了!:)请不要忘记通过点击左边的复选标记来接受正确的答案。我想Obinna只是想用更简单的库函数来解决这个问题(看起来像是一个课程问题)。使用remove*会作弊,很难看出你的答案是认真的。在OP code中,xx
是列表,而elt
是所有实例都应该删除的元素。
(define (delete-all xx elt)
(filter (lambda (y) (not(eq? xx y))) elt))