R6RS Scheme: 프로시저 호출과 문법 키워드
R6RS Scheme: 프로시저 호출과 문법 키워드
Scheme의 프로시저 호출과 문법 키워드(syntactic keyword)를 설명해요. 프로시저 호출과 특수 형(special form)을 구별하는 방법을 다뤄요.
출처: 문서
본문
(+ 23 42), (f 23), 그리고
((lambda (x) (+ x 42))
23)
은 모두 프로시저 호출의 예지만, lambda와 let 표현식은 그렇지 않아요. 그 이유는 let이 식별자이긴 하지만 변수가 아니라 *문법 키워드(syntactic keyword)*이기 때문이에요. 첫 번째 하위 표현식으로 문법 키워드를 갖는 형은 그 키워드가 결정하는 특별한 규칙을 따라요. 정의에서의 define 식별자도 문법 키워드예요. 따라서 정의도 프로시저 호출이 아니에요.
lambda 키워드에 대한 규칙은 첫 번째 하위형이 매개변수 목록이고, 나머지 하위형들은 프로시저의 본문이라고 명시해요. let 표현식에서는 첫 번째 하위형이 바인딩 명세의 목록이고, 나머지 하위형들이 표현식들의 본문을 구성해요.
프로시저 호출은 일반적으로 형의 첫 번째 위치에서 문법 키워드를 찾아 이러한 *특수 형(special forms)*과 구별될 수 있어요: 첫 번째 위치가 문법 키워드를 담고 있지 않으면 그 표현식은 프로시저 호출이에요. (소위 *식별자 매크로(identifier macros)*는 다른 종류의 특수 형을 만드는 것을 허용하지만, 비교적 드물어요.) Scheme의 문법 키워드 집합은 상당히 작아서, 보통 이 구별이 상당히 간단해요. 그러나 문법 키워드에 대한 새 바인딩을 만드는 것은 가능해요; 아래 1.9절을 보세요.