문법 한눈에 보기

일상적인 리스펙스 문법을 작은 예제와 결과로 한 페이지에서 훑고, 필요한 매뉴얼로 바로 이동합니다.

이 페이지는 지도입니다. 각 카드는 “지금 보고 있는 모양이 무엇인가?”에 답하고 정확한 동작을 설명하는 페이지로 이어집니다. 과정을 시작하기 전에 외울 필요는 없습니다.

리터럴과 주석

값 ; 주석

수, 불리언, 문자열, 문자, 인용한 심볼은 예측 가능한 값으로 평가됩니다. 세미콜론부터 줄 끝까지는 주석입니다.

LISPEX
(list 42 #t "tea" #\T 'ready)
; 이 줄의 나머지는 무시됩니다
소스와 리더 매뉴얼 보기

호출과 겹친 식

(프로시저 인자 ...)

첫 식이 프로시저를 고릅니다. 연산자와 인자는 왼쪽부터 평가되고, 안쪽 호출의 값이 준비된 뒤 바깥 호출이 사용합니다.

LISPEX
(+ 10 (* 2 3))
평가 순서 배우기

이름과 로컬 바인딩

define · let · let* · letrec

최상위 이름은 define, 나란한 로컬 입력은 let, 앞 바인딩이 필요한 순차 바인딩은 let*, 재귀적인 로컬 이름은 letrec으로 만듭니다.

LISPEX
(let ((price 20) (fee 3))
  (+ price fee))
바인딩과 스코프 배우기

이름 붙인 프로시저와 lambda

(define (이름 x) 본문) · (lambda (x) 본문)

프로시저도 값입니다. 정의 축약으로 최상위 이름을 붙이거나 lambda로 그 자리에서 만들 수 있습니다.

LISPEX
(define (double n) (* n 2))
(double 6)
프로시저와 인자 수 배우기

조건

if · cond · case · and · or

if는 두 식 중 하나를 고르고, cond는 여러 검사를 위에서부터 확인합니다. andor는 답을 아는 순간 멈춥니다. 오직 #f만 거짓입니다.

LISPEX
(if (>= 62 50) 'free 'standard)
조건 형식 고르기

인용 데이터와 리스트

'데이터 · (list 값 ...)

작은따옴표는 폼을 실행하지 않고 데이터로 보존합니다. list는 입력을 평가한 뒤 새 올바른 리스트를 만듭니다.

LISPEX
(list 'decision 'allow)
데이터와 집합 배우기

문자열, 벡터, 바이트

문자열은 유니코드 텍스트를 담습니다. 벡터는 인덱스로 접근하는 집합이며 현재 프로필에서는 변경할 수 있습니다. 바이트벡터는 한정된 바이트를 담고 변경할 수 없습니다.

LISPEX
(list (string-length "Lispex")
      (vector-ref #(red green blue) 1))
텍스트와 바이트 레퍼런스 보기

재귀와 고차 작업

재귀 · map · filter · fold · apply

구조를 따라갈 때는 입력이 줄어드는 재귀를 쓰고, 반복 변환에는 프로시저를 map, filter, fold에 전달합니다. 올바른 꼬리 호출은 루프 모양 재귀를 지원합니다.

LISPEX
(map (lambda (n) (* n 10)) '(1 2 3))
데이터 파이프라인 만들기

다음 고급 주제

궁금한 점이어서 볼 페이지
클로저가 바뀌는 바인딩을 어떻게 공유하나요?바인딩, 셀, 변경클로저
1/3은 정확하고 1.0/3은 왜 부정확한가요?정확수와 부정확수
계산 하나가 결과 두 개를 어떻게 내나요?다중 값
어떤 재귀가 일정한 스택을 쓰나요?올바른 꼬리 호출
탈출 연속은 언제 필요한가요?연속과 dynamic-wind
끝없는 계산과 거대한 출력은 어떻게 멈추나요?결정성과 자원

정확히 허용되는 토큰과 폼은 리더 문법핵심 형식에서 찾으세요. 안내 순서가 필요하면 학습 경로로 돌아가면 됩니다.