2010-12-03 7 views
-1

나는리스트를 취한 다음 그것을 뒤집는 scheme 프로그램을하고있다. 지금까지는 단순리스트 (sublist는 포함되지 않음)에서 작동하지만,리스트에 하위리스트가 있는지 테스트 할 때 실패합니다. 제발 어디서 잘못했는지 도와주세요. 모든Scheme 딥 역 기능

(define deep-reverse 
    (lambda (L) 
    (cond 
     ((empty? L) '()) 
     (else (append (deep-reverse (rest L)) (list (first L))))))) 

답변

0

첫째, 당신은 정의되지 않은 계획 기능을 사용하고 있습니다 : 다음은 코드입니다. 다음 가정을 해결할 예정입니다.

비워 둡니까? null입니까? 첫째

자동차

귀하의 코드는 목록의 첫 번째 요소를 복용하고 다른 목록에 추가하여 작동

이다 CDR

나머지입니다. 그러나 목록의 첫 번째 요소는 목록 자체 일 수 있습니다. 작업중인 요소가 원자 또는 목록인지 테스트해야합니다. 그것이 목록이라면, 당신은 재귀 적으로 깊은 역 호출을 호출합니다.

코드를 추가하려면 주석을 남기십시오. 이 질문의

+0

첫째, 휴식과 enpty를 참조하십시오? 언어를 가르 칠 때 사용되는 모든 공통 동의어입니다. 읽고 이해하기가 훨씬 쉽습니다. –

1
(define (deeprev L) 
      (if (null? L) '() 
       (if (list? (car L)) 
        (if (chek (car L)) (append (deeprev (cdr L)) (list (reverse (car L))))   
        (append (deeprev (cdr L)) (list (deeprev (car L))))) 
        (append (deeprev (cdr L)) (list (car L))))))