SICP 연습문제 2.55 친절한 풀이

문제

Eva Lu Ator는 실행기에서 다음 식을 쳐보았다.

(car ''abracadabra)

한데 quote라는 글이 답으로 나와서 깜짝 놀랐다. 어째서 이런 답이 나올까?

문제로 부터 얻은 것

작은 따옴표의 개념에 대해 조금 더 이해도가 높아졌습니다.
작은 따옴표는 실행기에서 quote 프로시저로 해석됩니다.
또한 작은 따옴표 뒤에 오는 괄호는 무조건 리스트로 해석됩니다.
또다른 작은 따옴표로 인해 생기는 quote 괄호도 예외는 아닙니다.

문제풀이

책에 따르면 작은 따옴표 '는 뒤에 오는 표현식을 그대로 반환한다는 의미입니다. 그런데 인터넷을 찾아보니, scheme에서 작은따옴표는 quote라는 프로시저로 번역된다는 것을 발견했습니다. 즉 아래의 식들은 전부 같은 의미입니다.

''abracadabra
(quote 'abracadabra)
(quote (quote abracadabra))

작은따옴표가 적용되는 원리



그리고 quote는 괄호로 묶인 무엇인가를 인자로 받으면, 무조건 괄호로 묶인 list로 해석합니다. 심지어 (car (quote (list 2)))는 2가 아니라 list를 반환합니다.

2가 아니라 list를 반환하는 기현상



그러므로 ''abracadabra 즉, (quote (quote abracadabra))는 (list quote abracadabra)로 해석되며, (car ''abracadabra)는 quote인 것입니다.
하지만 (list quote abracadabra)를 실행기에서 바로 실행하면, 에러가 발생합니다.



읽어주셔서 감사합니다.