2014-11-07 7 views
1

나뭇잎 나는 다음과 같은 코드가 있습니다제거 항목은 빈 널리스트 요소

(define (atom? x) 
    (and (not (null? x)) 
    (not (pair? x)))) 


(define delete 
    (lambda (atom l) 
    (cond 
     ((null? l) '()) 
     ((atom? l) 
     (cond 
      ((not(eq? atom l)) l) 
      (else '()) 
     ) 
     ) 
     (else (cons (delete atom (car l)) (delete atom (cdr l)))) 
    ) 
    ) 
) 

목표는이 목록에서 특정 문자를 제거하는 것입니다. 예를 들어, 대신이의

(delete 'a '(a b a)) ==> (b) 

나는 점점 오전 :

(delete 'a '(a b a))==> (() b()) 

나는 체계에 새로운입니다. 값을 찾으면 아무 것도 반환하지 않으려 고 노력했지만 다음과 같이 동작합니다.

(delete 'a '(a b a))==> (#<void> b #<void>) 

아이디어가 있으십니까? 많은 감사합니다!

답변

0
(define delete 
     (lambda (atom l) 
      (cond 
       ((null? l) '()) 
       ((atom? (car l)) 
        (cond 
          ((eq? atom (car l)) (delete atom (cdr l))) 
          (else (cons (car l) (delete atom (cdr l)))) 

        ) 
       ) 
       (else (cons (delete atom (car l)) (delete atom (cdr l)))) 
      ) 
    ) 
) 

이 솔루션은 기본에서 더 이해하기 쉽습니다.

+0

또한이 대답은 잘못되었습니다. 내 솔루션의 예제를 사용하여 테스트하면 더 복잡한 목록에 대해 잘못된 결과가 표시됩니다. 내 솔루션이 더 정교한 이유가 있습니다.이 문제는 쉽지 않으며 외관상으로 간단하지만 부정확 한 솔루션을 제공하면 아무에게도 도움이되지 않습니다. –