실행으로 확인하기
LISPEX
((lambda (x) (if #t x 0)) 42)관측 결과
OUTPUT
42이 순서로 생각하세요
if에는 else 가지가 반드시 있어야 합니다.begin과 프로시저 본문은 왼쪽부터 차례를 지킵니다.lambda는 개수가 정해진 매개변수와 점 표기 매개변수를 함께 받습니다.set!은 이미 있는 셀의 값을 바꾸고,define은 최상위 셀을 새로 만들거나 갱신합니다.quote는 바꿀 수 없는 리터럴 데이터를 돌려줍니다. 런타임은 인용한 요소를 평가하지 않습니다.module은(module 이름 (export 이름 ...) (import 이름 ...) 본문 ...)모양이고 최상위에만 둘 수 있습니다. 다른 형식 안에 넣으면 E130입니다.export와import절은 본문보다 앞서야 합니다.module의 머리 절은 검사만 받고 버려지며 본문은 바깥으로 펼쳐집니다. 이름 공간을 만들지 않습니다. 감추는 장치를 기대하지 마세요. 아래(f 21)이 모듈 밖에서 그대로 불리는 이유입니다.
LISPEX
(module doubling
(export twice)
(define (twice x) (* x 2)))
(twice 21)관측 결과
OUTPUT
42형식 계약
| 형식 | 인자 수 / 평가 | 결과 또는 오류 |
|---|---|---|
| quote | datum 1개, 요소 평가 없음 | 불변 datum |
| if | 테스트, 참 가지, 거짓 가지를 받고 테스트를 먼저 본다 | 선택된 가지가 낸 값들. 테스트가 한 값이 아니면 E320 |
| lambda | 매개변수와 본문 1..N개 | 클로저. 적용 인자 수가 다르면 E302 |
| set! | 이름과 오른쪽의 단일 값 식 | 0개 값. 이름이 바인딩되지 않았으면 E303 |
| let / letrec | 바인딩 목록과 본문 1..N개 | 마지막 본문이 낸 값들. 초기화되지 않은 letrec을 읽으면 E321 |
| module | 이름, 머리 절 0..2개, 본문 1..N개 | 본문을 바깥으로 펼친다. 최상위가 아니면 E130 |
흔한 오해
짧게 줄여 쓰는 편의 형식은 이 페이지가 아니라 파생 형식 레퍼런스에서 다룹니다.
다음으로
이 형태로 정규화되는 축약 표기는 파생 형식에 있고, 각 부분식이 언제 실행되는지는 매뉴얼이 설명합니다.