괄호 읽는 법

호출과 특수 형식을 구분하고, 겹친 계산의 결과를 예상합니다.

호출할 프로시저와 입력을 찾아 겹친 계산의 결과를 예상해 봅니다. 호출과 정의를 구분하는 방법도 익힙니다.

프로그래밍 경험은 없어도 됩니다. 실행할 예제를 하나씩 플레이그라운드에 넣으면 결과를 볼 수 있습니다.

호출 읽기

LISPEX
(+ 2 3)

결과

출력
5

첫 항목인 +는 호출할 프로시저의 이름입니다. 프로시저는 전달받은 값으로 연산을 수행합니다. 이때 전달하는 값을 인자라고 하며, 여기서는 2와 3입니다.

보통 호출은 다음과 같이 씁니다.

(할일 입력1 입력2 ...)

리스펙스는 첫 항목을 평가해 프로시저를 구합니다. 이어서 입력 식을 왼쪽부터 계산하고, 그 값들을 인자로 전달해 프로시저를 호출합니다.

겹친 호출 읽기

LISPEX
(+ 10 (* 2 3))

결과

출력
16

리스펙스는 +를 찾고 10을 평가한 다음 (* 2 3)을 계산합니다. 곱셈의 결과는 6입니다. 바깥 호출은 10과 6을 더합니다.

괄호는 각 호출의 입력을 묶습니다. 여기서는 곱셈이 덧셈 안에 있으므로 곱셈의 결과가 +의 인자가 됩니다.

정의 읽기

아래 프로시저는 재단 너비와 양쪽 도련의 합을 더합니다. 두 입력은 같은 단위를 씁니다.

LISPEX
(define (도련-포함-너비 재단-너비 도련)
  (+ 재단-너비 도련))

이 코드는 도련-포함-너비를 정의하며 아무것도 출력하지 않습니다. 이 프로시저는 인자 두 개를 받아 재단-너비와 도련라는 이름으로 사용합니다. 본문인 (+ 재단-너비 도련)는 프로시저를 호출할 때 실행됩니다.

define은 특수 형식입니다. 특수 형식마다 어느 부분을 평가할지 정하는 규칙이 있습니다. 여기서 (도련-포함-너비 재단-너비 도련)는 프로시저 이름과 입력 이름을 선언하는 부분이며, 호출이 아닙니다.

if, quote, lambda도 특수 형식입니다. 모두 괄호를 쓰지만 각 형식의 규칙을 알아야 어떤 부분이 실행되는지 알 수 있습니다.

직접 해 보기

실행하기 전에 결과를 예상해 보세요.

LISPEX
(+ 1 (* 2 (+ 3 4)))
정답 보기

결과는 15입니다. 먼저 (+ 3 4)가 7을 반환합니다. 이어서 (* 2 7)이 14를, 마지막으로 (+ 1 14)가 15를 반환합니다.

앞의 정의에서 프로시저 이름, 입력 이름 두 개, 본문의 호출을 찾아보세요.

정답 보기

프로시저 이름은 도련-포함-너비입니다. 입력 이름은 재단-너비와 도련입니다. 프로시저를 실행하면 본문에서 이 두 이름의 값을 인자로 전달해 +를 호출합니다.

첫 프로그램에서 완전한 프로그램을 실행해 보세요.