1부. 클로저의 기초
1장. 클로저의 기본철학
1.1 클로저의 사고방식
1.2 리습이 왜 또 필요한가?
1.3 함수형 프로그래밍
1.4 클로저는 왜 객체 지향이 아닐까?
1.5 요약
2장. 클로저, 집중적으로 맛보기
2.1 스칼라: 기본 데이터 타입
2.2 한 데 묶어두기: 컬렉션
2.3 동작 수행하기: 함수 호출
2.4 Var는 변수가 아니다
2.5 함수
2.6 로컬, 반복, 블록
2.7 문제 발생 방지하기: 인용
2.8 호스트 라이브러리 사용하기
2.9 예외 상황
2.10 네임스페이스로 코드 모듈화하기
2.11 정리
3장. 클로저에 발 담그기
3.1 참
3.2 nil의 중의성에 주의하자
3.3 구조분해
3.4 REPL 다뤄보기
3.5 정리
2부. 데이터 타입
4장. 스칼라
4.1 정밀도 이해하기
4.2 유리수 사용하기
4.3 키워드의 용도
4.4 심벌 이해하기
4.5 정규 표현식 - 제2의 문제
4.6 정리
5장. 컬렉션 타입
5.1 영속성, 시퀀스, 복잡성
5.2 벡터: 다양한 방법으로 생성하고 사용하기
5.3 리스트: 클로저의 코드-구문 데이터 구조
5.4 영속성 큐 사용 방법
5.5 영속적 셋
5.6 맵으로 생각하기
5.7 종합하기: 시퀀스에서 아이템 위치 찾기
5.8 정리
3부. 함수형 프로그래밍 기법
6장. 지연과 불변성
6.1 불변성
6.2 구조적 공유: 영속적 구조
6.3 지연
6.4 종합하기: 지연 퀵 정렬
6.5 정리
7장. 함수형 프로그래밍
7.1 함수 구문의 종류
7.2 클로저(closure)
7.3 재귀적으로 생각하기
7.4 종합하기: A* 경로 탐색
7.5 정리
4부. 대규모 시스템 설계
8장. 매크로
8.1 데이터는 코드가 데이터다
8.2 제어 구조 정의
8.3 구문 결합 매크로
8.4 매크로를 사용하여 구문 변경하기
8.5 매크로로 심벌릭 레졸루션 타임 제어하기
8.6 매크로로 리소스 관리하기
8.7 종합하기: 함수를 리턴하는 매크로
8.8 정리
9장. 데이터와 코드의 결합
9.1 네임스페이스
9.2 보편적 디자인 패턴의 클로저 멀티메서드 탐구
9.3 타입, 프로토콜, 레코드
9.4 종합하기: 체스 말 이동을 위한 플루언트 빌더
9.5 정리
10장. 가변성과 동시성
10.1 ref는 언제 사용하는가
10.2 ref로 리팩토링하기
10.3 에이전트는 언제 사용하는가
10.4 애텀은 언제 사용하는가
10.5 언제 락을 사용하는가
10.6 var와 동적 바인딩
10.7 정리
11장. 병렬성
11.1 퓨처는 언제 사용하는가
11.2 프로미스는 언제 사용하는가
11.3 병렬 연산
11.4 간단한 reduce/fold 소개
11.5 정리
5부. 호스트 공생
12장. Java.next
12.1 프록시로 상황에 맞는 객체 만들기
12.2 클로저 gen-class와 GUI 프로그래밍
12.3 클로저와 자바 배열 간의 관계
12.4 모든 클로저 함수들이 구현하고 있는 인터페이스
12.5 자바 API에서 클로저 데이터 구조 사용하기
12.6 definterface 매크로
12.7 예외를 주의하자
12.8 정리
13장. 왜 클로저스크립트인가?
13.1 구현 vs. 인터페이스
13.2 컴파일러 들여다보기: 분석 vs. 배출
13.3 컴파일 타임 vs. 런 타임
13.4 정리
6부. 기타 고려 사항들
14장. 데이터 지향 프로그래밍
14.1 코드로서의 코드, 데이터로서의 데이터
14.2 데이터로서의 데이터
14.3 코드로서의 데이터
14.4 코드로서의 데이터로서의 코드(code as data as code)
14.5 정리
15장. 성능
15.1 타입 힌트
15.2 트랜션트
15.3 청크 시퀀스
15.4 메모이제이션
15.5 강제 변환 이해하기
15.6 Reducible
15.7 정리
16장. 생각하는 프로그램
16.1 검색 문제
16.2 데이터 단일화 고려하기
16.3 core.logic 소개
16.4 제약
16.5 정리
17장. 생각하는 방법을 바꿔주는 클로저
17.1 도메인 내에서 생각하기
17.2 테스트
17.3 보이지 않는 디자인 패턴
17.4 에러 처리와 디버깅
17.5 이 책을 마무리하며