2017-04-03 11 views
2

나는 exercise 3.13 from SICP을하고있다. 그러나 나는 나의 대답을 확신 할 수 없다.SICP 운동 3.13 - make-cycle

운동 3.13 : 운동 3.12에 정의 된 마지막 쌍의 절차를 사용하는 다음 메이크업 사이클 절차, 고려하십시오!

(정의 (X-사이클 만들기) (설정 CDR을 (last- 쌍 x)는 x)는 X)

(Z 정의 (확인 사이클 (리스트 'A', B '에 의해 생성 된 구조 Z를 나타내는 박스 및 포인터도를 그린다 c)))

우리가 (마지막 쌍 z)를 계산하려고합니까?

나는

(last-pair z) 

무한 루프가됩니다 이유를 이해하기 위해 노력하고있어. 우리가 set-cdr!을 수행 할 때

(set-cdr! (last-pair x) x) 

(last-pair x)(cons 'c '()) 것, 다음 쌍 될 것입니다 :

(cons 'c (cons 'a (cons 'b (cons 'c (cons 'a (cons 'b (cons 'c (cons 'a (cons 'b (cons 'c ...)))))))))) 

내 이해입니다 박스와 포인터 다이어그램을 무시하고, 여기에 내가 그것을 이해하는 방법이다 옳은?

답변

2

번호

당신의 대답은 (last-pair x)cons 무한 여러 번 호출 한 결과임을 나타냅니다 나타납니다.

그렇지 않습니다.

x 여전히 루프 (꼬리 자체 무는 뱀)을 생성 단지 3 반대 세포이지만 첫번째 행 마지막 포인트 이다.