작은따옴표를 붙이면 호출이 어떻게 데이터가 되는지 예상해 봅니다.
car와 cdr로 리스트에서 결정을 꺼내는 방법도 익힙니다.
괄호 읽는 법을 먼저 읽으세요. 각 예제는 플레이그라운드에서 따로 실행해 결과를 확인하세요.
여기서 keep은 절 제목을 현재 쪽에 그대로 둔다는 뜻입니다.
호출과 인용한 리스트 비교하기
(+ 2 3)결과
5이 코드는 수 2와 3을 인자로 전달해 +를 호출합니다.
이제 앞에 작은따옴표를 붙여 보세요.
'(+ 2 3)결과
(+ 2 3)결과는 심볼 +와 수 2와 3으로 이루어진 원소 세 개짜리 리스트입니다.
심볼은 코드에서 이름으로 쓸 수 있는 값입니다.
여기서는 +가 리스트 안의 심볼로 남으므로 덧셈을 하지 않습니다.
앞의 '는 quote를 줄여 쓴 표기입니다.
뒤따르는 데이터를 코드로 계산하지 않고 그대로 반환합니다.
호출과 리스트 데이터는 같은 괄호 표기법을 사용합니다.
리스트에서 결정 읽기
(define answer '(decision keep))
(car (cdr answer))결과
keepanswer는 심볼 decision과 keep를 담은 리스트의 이름입니다.
첫 심볼은 결과의 종류를 나타내고, 둘째 심볼은 결정을 나타냅니다.
비어 있지 않은 리스트에서 car는 첫 원소를, cdr은 나머지 리스트를 반환합니다.
여기서 (cdr answer)는 (keep)를 반환합니다.
바깥의 car가 그 첫 원소인 심볼 keep를 꺼냅니다.
같은 리스트 연산으로 '(+ 2 3)처럼 인용한 호출도 살펴볼 수 있습니다.
프로그램은 새로운 프로그램 식을 나타내는 리스트를 만들 수도 있습니다.
함께 쓰는 표기 알아보기
quote는 고정된 데이터를 보존합니다.
일부를 계산해서 채울 리스트에는 quasiquote를 쓸 수 있습니다.
아래 네 줄은 실행할 프로그램이 아니라 표기법을 보여 줍니다.
'x
`x
,x
,@xs| 표기 | 이름 | 뜻 |
|---|---|---|
'x | quote | x를 데이터로 보존 |
`x | quasiquote | 일부를 계산해서 채울 데이터 틀 |
,x | unquote | quasiquote 안에서 x의 값을 삽입 |
,@xs | unquote-splicing | quasiquote 안에서 리스트 xs의 원소들을 펼쳐 삽입 |
쉼표로 시작하는 두 표기는 quasiquote 안에서 사용합니다.
이번 수업의 고정된 리스트들은 quote로 쓸 수 있습니다.
직접 해 보기
실행하기 전에 결과의 두 원소를 예상해 보세요.
(list (+ 1 2) '(+ 1 2))정답 보기
결과는 (3 (+ 1 2))입니다.
list의 첫 인자는 +를 호출해 3을 반환합니다.
둘째 인자는 인용했으므로 원소 세 개짜리 리스트 (+ 1 2)를 반환합니다.
list가 두 값을 하나의 리스트로 묶습니다.
(car (cdr answer))가 심볼을 반환하고 (cdr answer)가 리스트를 반환하는 이유를 설명해 보세요.
이어서 데이터, 조건, 결정에서 조건에 따라 결정을 고릅니다.