언제 필요한가요?
조건식은 질문의 모양을 보고 고르세요. 예/아니오를 한 번 묻는지, 술어가 여럿인지, 한 값을 고정 datum들과 비교하는지, 한쪽 경우에만 효과를 실행하는지에 따라 답이 갈립니다. 그리고 거짓인 값은 #f 하나뿐이라는 점을 기억하세요.
실행으로 확인하기
LISPEX
(case 2 ((1) 'one) ((2) 'two) (else 'other))관측 결과
OUTPUT
two예제 읽기
case는 2를 한 번만 평가합니다. 그런 다음 나열된 각 datum과 eqv?로 비교해 두 번째 절을 고릅니다. 결과는 인용된 심볼 two이고, else 절은 평가하지 않습니다.
이 순서로 생각하세요
cond와case,and,or,when,unless,let*, 이름 있는let,do, 준인용은 고정된 평가 순서와 꼬리 위치를 보존합니다.- 정규화가 만들어 내는 임시 이름과 숨은 내재 연산은 사용자 이름에 붙잡히거나 가려지지 않습니다.
case는 datum을eqv?로 비교합니다.when과unless의 거짓 경로는 0개 값을 냅니다.
빠르게 고르기
| 형식 | 쓸 때 | 결과 동작 |
|---|---|---|
if | 분기가 정확히 둘일 때 | 선택한 분기의 값을 반환 |
cond | 여러 술어가 각 경우를 설명할 때 | 처음 맞는 절을 반환 |
case | 한 값을 고정 datum들과 비교할 때 | 키를 한 번만 평가 |
and / or | 검사가 단락 평가 사슬일 때 | 불리언으로 바꾸지 않고 피연산자 값을 반환 |
when / unless | 한쪽 효과만 표현할 때 | 거짓 경로는 0개 값 |
흔한 오해
define-syntax나 사용자 매크로 확장은 없습니다.
현재 경계
- 준인용 밖에 단독으로 쓴
unquote,unquote-splicing은 정적 오류입니다.
다음으로
일상적으로 쓰는 형식은 데이터와 결정 수업에서 익히세요. 정확한 정규화 형태는 파생 형식 레퍼런스에 있습니다.