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.next12.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 Reducible15.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 이 책을 마무리하며