핵심 형식

규칙을 실행하는 프로그램이 직접 다루는 핵심은 인용, 변수 참조, if, 순차 실행, 람다, 적용, 대입, 정의, 어휘 바인딩, 고정 제어 노드입니다.

실행으로 확인하기

LISPEX
((lambda (x) (if #t x 0)) 42)

관측 결과

OUTPUT
42

이 순서로 생각하세요

  • if에는 else 가지가 반드시 있어야 합니다. begin과 프로시저 본문은 왼쪽부터 차례를 지킵니다.
  • lambda는 개수가 정해진 매개변수와 점 표기 매개변수를 함께 받습니다. set!은 이미 있는 셀의 값을 바꾸고, define은 최상위 셀을 새로 만들거나 갱신합니다.
  • quote는 바꿀 수 없는 리터럴 데이터를 돌려줍니다. 런타임은 인용한 요소를 평가하지 않습니다.
  • module(module 이름 (export 이름 ...) (import 이름 ...) 본문 ...) 모양이고 최상위에만 둘 수 있습니다. 다른 형식 안에 넣으면 E130입니다. exportimport 절은 본문보다 앞서야 합니다.
  • module의 머리 절은 검사만 받고 버려지며 본문은 바깥으로 펼쳐집니다. 이름 공간을 만들지 않습니다. 감추는 장치를 기대하지 마세요. 아래 (f 21)이 모듈 밖에서 그대로 불리는 이유입니다.
LISPEX
(module doubling
  (export twice)
  (define (twice x) (* x 2)))

(twice 21)

관측 결과

OUTPUT
42

형식 계약

형식인자 수 / 평가결과 또는 오류
quotedatum 1개, 요소 평가 없음불변 datum
if테스트, 참 가지, 거짓 가지를 받고 테스트를 먼저 본다선택된 가지가 낸 값들. 테스트가 한 값이 아니면 E320
lambda매개변수와 본문 1..N개클로저. 적용 인자 수가 다르면 E302
set!이름과 오른쪽의 단일 값 식0개 값. 이름이 바인딩되지 않았으면 E303
let / letrec바인딩 목록과 본문 1..N개마지막 본문이 낸 값들. 초기화되지 않은 letrec을 읽으면 E321
module이름, 머리 절 0..2개, 본문 1..N개본문을 바깥으로 펼친다. 최상위가 아니면 E130

흔한 오해

짧게 줄여 쓰는 편의 형식은 이 페이지가 아니라 파생 형식 레퍼런스에서 다룹니다.

다음으로

이 형태로 정규화되는 축약 표기는 파생 형식에 있고, 각 부분식이 언제 실행되는지는 매뉴얼이 설명합니다.

파생 형식 · 표현식과 평가 순서