2016-04-10 37 views
0
(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) 

James açık olmalıdır listenin bir elemanın (1 2 3) (4 5 6) (8 5 6) ile uyumlu ise. (1 2 3) 'ü temizleyebilirim ve (4 5 6) (8 5 6)' yı her tekrarlı olarak temizlemek istiyorum. Ancak bunu başaramam. Acil yardıma ihtiyacım var, lütfen.temizle şemada listesi

cevap

0

sen işe yaramaz yazdı clear prosedür remove kaldırıldı öğe, olmayan yeni bir liste oluşturur, ancak orijinal bozulmadan kalır. Bunun yerine bu deneyin: Bu değiştirilmemiş orijinal listeyi bırakarak elemanları kaldırılır yeni bir liste oluşturur - biz Şemada programlar yazmak nasıl:

(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)))))) 

Bu nasıl çalıştığını olduğunu

(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))) 
+0

teşekkür ederiz her şey için çok. Yardımınız beni rahatlatıyor :) –