이 페이지는 지도입니다. 각 카드는 “지금 보고 있는 모양이 무엇인가?”에 답하고 정확한 동작을 설명하는 페이지로 이어집니다. 과정을 시작하기 전에 외울 필요는 없습니다.
리터럴과 주석
값 ; 주석수, 불리언, 문자열, 문자, 인용한 심볼은 예측 가능한 값으로 평가됩니다. 세미콜론부터 줄 끝까지는 주석입니다.
(list 42 #t "tea" #\T 'ready)
; 이 줄의 나머지는 무시됩니다
호출과 겹친 식
(프로시저 인자 ...)첫 식이 프로시저를 고릅니다. 연산자와 인자는 왼쪽부터 평가되고, 안쪽 호출의 값이 준비된 뒤 바깥 호출이 사용합니다.
(+ 10 (* 2 3))
이름과 로컬 바인딩
define · let · let* · letrec최상위 이름은 define, 나란한 로컬 입력은 let, 앞 바인딩이 필요한 순차
바인딩은 let*, 재귀적인 로컬 이름은 letrec으로 만듭니다.
(let ((price 20) (fee 3))
(+ price fee))
이름 붙인 프로시저와 lambda
(define (이름 x) 본문) · (lambda (x) 본문)프로시저도 값입니다. 정의 축약으로 최상위 이름을 붙이거나 lambda로 그 자리에서
만들 수 있습니다.
(define (double n) (* n 2))
(double 6)
조건
if · cond · case · and · orif는 두 식 중 하나를 고르고, cond는 여러 검사를 위에서부터 확인합니다.
and와 or는 답을 아는 순간 멈춥니다. 오직 #f만 거짓입니다.
(if (>= 62 50) 'free 'standard)
인용 데이터와 리스트
'데이터 · (list 값 ...)작은따옴표는 폼을 실행하지 않고 데이터로 보존합니다. list는 입력을 평가한 뒤
새 올바른 리스트를 만듭니다.
(list 'decision 'allow)
문자열, 벡터, 바이트
문자열은 유니코드 텍스트를 담습니다. 벡터는 인덱스로 접근하는 집합이며 현재 프로필에서는 변경할 수 있습니다. 바이트벡터는 한정된 바이트를 담고 변경할 수 없습니다.
(list (string-length "Lispex")
(vector-ref #(red green blue) 1))
재귀와 고차 작업
재귀 · map · filter · fold · apply구조를 따라갈 때는 입력이 줄어드는 재귀를 쓰고, 반복 변환에는 프로시저를
map, filter, fold에 전달합니다. 올바른 꼬리 호출은 루프 모양 재귀를
지원합니다.
(map (lambda (n) (* n 10)) '(1 2 3))
다음 고급 주제
| 궁금한 점 | 이어서 볼 페이지 |
|---|---|
| 클로저가 바뀌는 바인딩을 어떻게 공유하나요? | 바인딩, 셀, 변경과 클로저 |
1/3은 정확하고 1.0/3은 왜 부정확한가요? | 정확수와 부정확수 |
| 계산 하나가 결과 두 개를 어떻게 내나요? | 다중 값 |
| 어떤 재귀가 일정한 스택을 쓰나요? | 올바른 꼬리 호출 |
| 탈출 연속은 언제 필요한가요? | 연속과 dynamic-wind |
| 끝없는 계산과 거대한 출력은 어떻게 멈추나요? | 결정성과 자원 |
정확히 허용되는 토큰과 폼은 리더 문법과 핵심 형식에서 찾으세요. 안내 순서가 필요하면 학습 경로로 돌아가면 됩니다.