조건식과 파생 형식

`if`, 시퀀스, 바인딩, 람다, 적용, 대입, 인용의 작은 코어 위로 파생 형식이 위생적으로 정규화됩니다.

언제 필요한가요?

질문의 모양에 따라 조건식을 고르세요. 예/아니오 하나, 여러 술어, 한 값을 고정 datum과 비교하기, 한 경우에만 실행할 효과가 각각 다릅니다. 거짓은 #f 하나뿐입니다.

실행으로 확인하기

LISPEX
(case 2 ((1) 'one) ((2) 'two) (else 'other))

관측 결과

OUTPUT
two

예제 읽기

case2를 한 번 평가하고 각 datum과 eqv?로 비교해 두 번째 절을 고릅니다. 인용된 심볼 two가 결과이며 else 절은 평가하지 않습니다.

이 순서로 생각하세요

  • cond, case, and, or, when, unless, let*, 이름 있는 let, do, 준인용은 고정 평가·꼬리 위치를 보존합니다.
  • 생성 임시 이름과 숨은 내재 연산은 사용자 이름에 캡처되거나 가려지지 않습니다.
  • case는 datum을 eqv?로 비교하며 whenunless의 거짓 경로는 0개 값을 냅니다.

빠르게 고르기

형식쓸 때결과 동작
if분기가 정확히 둘일 때선택한 분기의 값을 반환
cond여러 술어가 각 경우를 설명할 때처음 맞는 절을 반환
case한 값을 고정 datum들과 비교할 때키를 한 번만 평가
and / or검사가 단락 평가 사슬일 때불리언으로 바꾸지 않고 피연산자 값을 반환
when / unless한쪽 효과만 표현할 때거짓 경로는 0개 값

흔한 오해

define-syntax나 사용자 매크로 확장은 없습니다.

현재 경계

  • 준인용 밖의 단독 unquote, unquote-splicing은 정적 오류입니다.

다음으로

일상 형식은 데이터와 결정 수업에서 익히고, 정확한 정규화 형태는 파생 형식 레퍼런스에서 확인하세요.

데이터와 결정 · 파생 형식