2014-11-08 5 views
0

어떻게 두 번 목록에있는 모든 요소를 ​​쓰는가 등이 :이 프로그램을 구성표에 작성하려면 어떻게해야합니까?

(double '(a((b)(c d)(((e)))))) --> '(a a((b b)(c c d d)(((e e))))) 

나는 현재 지금까지이 있지만 그것은 아주 옳지 않아.

(define double 
    (lambda (x) 
    (cond ((null? x) '()) 
      ((list? x)(append (double (car x)) (double cdr x))) 
      (else (cons x (cons x '())))))) 
+0

* 모든 * 요소하지 않을까요 :

(define double (lambda (x) (cond ((null? x) '()) ((list? (car x)) ; ask about the car of the list. It's better to use pair? (cons (double (car x)) ; use cons, not append (double (cdr x)))) (else (cons (car x) (cons (car x) (double (cdr x)))))))) ; double the car 

그것은 예상대로 작동 : 여기에 고정 된 버전입니다 ((ee) (ee)))) ((bb) (bc) (ccdd)) ((ee)) (((ee) (ee))) ((ee) (ee))) ((ee) – Sylwester

답변

1

당신은 대답에 가까웠다의 핵심은 우리가리스트의 car 목록 자체가 원자 이런 식으로, 때 우리가 수정할 수없는, 원자 때 요소를 두 배로해야한다는 것입니다 우리가 산출물로 작성한 목록. .. 그 금액에`(AA ((BB) (BB) (ccdd) ​​(ccdd

(double '(a ((b) (c d) (((e)))))) 
=> '(a a ((b b) (c c d d) (((e e))))) 
관련 문제