파생 형식

cond, case, and, or, when, unless, let*, 이름 있는 let, do, 준인용, guard는 사용자 매크로가 아니라 정규화기 안에 이미 들어 있습니다.

실행으로 확인하기

LISPEX
(let* ((x 6) (y (+ x 1))) (* x y))

관측 결과

OUTPUT
42

이 순서로 생각하세요

  • 확장은 새 이름과 숨은 내장 도우미를 씁니다. 그래서 직접 쓴 코드에서 같은 이름을 가려도 확장의 뜻은 바뀌지 않습니다.
  • 정규화는 정의된 꼬리 위치와 소스 진단을 그대로 지킵니다.
  • guard는 잡을 수 있는 오류를 다루려고 코어에 고정해 둔 구조입니다. 일반 매크로 기능이 아닙니다.

줄여 쓴 형식은 무엇으로 바뀌는가

줄여 쓴 형식코어 전략고정 경계
cond / case새 임시 이름을 쓴 중첩 if, case는 숨은 eqv? 사용절 꼬리 위치 보존, cond => 없음
and / or단락 중첩 if마지막 단일 피연산자는 꼬리 유지
when / unlessif와 begin 또는 0개 값 values거짓 경로는 0개 값
이름 있는 let / do위생적 letrec 루프재귀 적용은 꼬리
quasiquotequote와 숨은 생성자quasiquote 밖 단독 unquote는 정적 E1xx

흔한 오해

define-syntax, 구문 객체, 임의 확장은 거부됩니다.

다음으로

이 표기들이 바뀌어 들어가는 형태는 핵심 형식에 있고, 조건식 가운데 무엇을 쓸지는 매뉴얼이 도와줍니다.

핵심 형식 · 조건식과 파생 형식