清除方案中的列表
Clear the list in scheme
(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)
If james is matched with an element of list then (1 2 3) (4 5 6) (8 5
6) must be clear. I can just clear the (1 2 3) and i want to clear (4
5 6) (8 5 6) each by each recursively. However i can't succesive that.
I need an emergency help, please.
您编写的 clear
过程将不起作用,remove
创建一个新列表,其中删除的元素不存在,但原始元素保持不变。试试这个:
(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))))))
它是这样工作的:它创建一个新的列表,其中的元素被删除,原始列表保持不变 - 这就是我们在 Scheme 中编写程序的方式:
(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)))
(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)
If james is matched with an element of list then (1 2 3) (4 5 6) (8 5 6) must be clear. I can just clear the (1 2 3) and i want to clear (4 5 6) (8 5 6) each by each recursively. However i can't succesive that. I need an emergency help, please.
您编写的 clear
过程将不起作用,remove
创建一个新列表,其中删除的元素不存在,但原始元素保持不变。试试这个:
(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))))))
它是这样工作的:它创建一个新的列表,其中的元素被删除,原始列表保持不变 - 这就是我们在 Scheme 中编写程序的方式:
(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)))