List 清除方案中的列表
如果james与list的一个元素匹配,那么(1,2,3)(4,5,6)(8,5 6) 必须清楚。我只需要清除(1 2 3),我想清除(4 5.6)(8.5.6)一个接一个地递归。但是我不能成功。 我需要紧急援助List 清除方案中的列表,list,scheme,List,Scheme,如果james与list的一个元素匹配,那么(1,2,3)(4,5,6)(8,5 6) 必须清楚。我只需要清除(1 2 3),我想清除(4 5.6)(8.5.6)一个接一个地递归。但是我不能成功。 我需要紧急援助 您编写的clear过程无效,remove将创建一个新列表,其中删除的元素不存在,但原始元素保持不变。请尝试以下方法: (define ls2 '((james (1 2 3) (4 5 6) (8 5 6)) (daren (7 8 9) (2 6 4))
您编写的
clear
过程无效,remove
将创建一个新列表,其中删除的元素不存在,但原始元素保持不变。请尝试以下方法:
(define ls2 '((james (1 2 3) (4 5 6) (8 5 6))
(daren (7 8 9) (2 6 4))
))
(define (delete name lst clear)
(if (equal? (caar ls2) name) (clear (cdar lst))
(delete name (cdr lst) clear)))
(define (clear lst)
(if (null? lst) #t (remove (car lst) lst)))
(delete 'james ls2 clear)
这就是它的工作原理:它创建了一个新的列表,其中元素被删除,原始列表保持不变-这就是我们在Scheme中编写程序的方式:
(define (delete name lst)
(cond ((null? lst) '())
((equal? (caar lst) name) ; if there's a match
(cons (list (caar lst)) ; clear all elements at once
(delete name (cdr lst)))) ; and advance recursion
(else (cons (car lst)
(delete name (cdr lst))))))
非常感谢你所做的一切。你的帮助让我松了一口气:)
(define lst '((james (1 2 3) (4 5 6) (8 5 6))
(daren (7 8 9) (2 6 4))))
(delete 'james lst)
=> '((james) (daren (7 8 9) (2 6 4)))