SICP 연습문제 2.54 친절한 풀이
문제
두 리스트의 원소들이 차례대로 모두 같다면, 두 리스트가 equal? 하다고 정의한다. 보기를 들어, 아래 식의 값은 참이다.
(equal? '(this is a list) '(this is a list)) |
하지만, 다음 식은 거짓이다.
(equal? '(this is a list) '(this (is a) list)) |
더 정확히 설명하면, equal?은 eq?를 써서 되돌기 프로시저로 정의내릴 수 있다. 즉, 인자로 받은 a와 b가 서로 eq?한 글자거나, 두 인자가 (car a)와 (car b)가 equal?하고 (cdr a)와 (cdr b)도 equal?한 리스트라면, a와 b는 equal?하다고 볼 수 있다. 이런 생각을 바탕으로 equal? 프로시저를 구현하라.
문제로 부터 얻은 것
잃어버릴 뻔 했던 되돌면서 검사하는 프로시저의 감을 잃지 않게 해주었습니다.
eq?와 equal? 프로시저의 존재를 알게 되었습니다. 앞으로의 문제들에 많이 쓰일 것 같습니다.
문제풀이
eqaul? 프로시저의 인자 x, y는 둘다 리스트거나, 둘다 리스트의 마지막이거나, 서로 같거나, 다릅니다. 이를 cond의 술어로 생각하고 프로시저를 짜면 다음과 같습니다.
(define (equal? x y) |
문제의 테스트 코드를 실행해 보겠습니다.
(equal? '(this is a list) '(this is a list)) |
읽어주셔서 감사합니다.