목차

옮긴이의 글
추천사
감사의 글

서문

누구에게 맞는 책인가
어떤 내용을 다루는가
이 책 활용법

함수형 언어를 사용하는 개발자에게
자바와 C# 개발자에게
Lisp 개발자에게
펄, 파이썬 또는 루비 개발자에게

이 책의 표기 규칙
웹 자료와 의견 수렴
예제 코드 다운로드

 

1장 시작하기

1.1 왜 클로저인가

클로저는 우아하다
클로저 – Lisp의 부활
클로저는 함수형 언어다
클로저는 병행 프로그래밍을 간단하게 만든다
클로저는 자바를 포함한다

1.2 클로저 코딩 시작하기

REPL 사용하기
특수 변수
공유 상태 추가하기

1.3 클로저 라이브러리 살펴보기

require뿐 아니라 use를 사용해 보자
문서 찾아보기

1.4 Lancet 소개
1.5 정리

 

2장 클로저 둘러보기

2.1 기본 구문

숫자 타입 사용하기
심벌
문자와 문자열
불리언과 nil
맵, 키워드, 구조체

2.2 리더 매크로
2.3 함수

익명 함수
언제 익명 함수를 사용할까

2.4 var, 바인딩, 이름 공간

바인딩
디스트럭처링
이름 공간

2.5 흐름 제어

if를 이용한 분기
do로 부수효과 일으키기
loop/recur를 이용한 반복

2.6 for 루프는 언제 나올까
2.7 메타데이터

리더 메타데이터

2.8 요약

3장 자바와 같이 일하기

3.1 자바 호출

생성자, 메서드, 필드에 접근하기
간편 문법
자바 컬렉션 사용
편의 함수

3.2 성능 최적화

원시 타입을 사용한 성능 향상
타입 힌트 추가

3.3 자바 클래스를 만들고 컴파일하기

자바 프록시 만들기
디스크에 컴파일하기

3.4 예외 처리

간단한 예외 처리
자원 해제
예외 처리

3.5 Lancet에 앤트 프로젝트 및 태스크 추가

Lancet Step 1: 앤트 프로젝트 및 태스크

3.6 정리

 

4장 데이터를 시퀀스로 다루기

4.1 모든 것은 시퀀스
4.2 시퀀스 라이브러리 사용하기

시퀀스 생성
시퀀스 필터링
시퀀스 서술식
시퀀스 변환

4.3 지연 시퀀스와 무한한 시퀀스

지연된 연산을 실행하기

4.4 자바 개체 역시 시퀀스처럼

자바 컬렉션을 시퀀스로 다루기
정규식을 시퀀스로 다루기
파일 시스템을 시퀀스로 다루기
스트림을 시퀀스로 다루기
XML을 시퀀스로 다루기

4.5 특정 자료구조를 위한 함수

리스트에 대한 함수
벡터에 대한 함수
맵에 대한 함수
집합에 대한 함수

4.6 Lancet 태스크에 속성 추가하기

Lancet Step 2: 속성 설정하기

4.7 정리

 

5장 함수형 프로그래밍

5.1 함수형 프로그래밍의 개념

순수 함수
영속적 자료구조
지연 평가와 재귀
참조 투명성
함수형 프로그래밍의 이점
여섯 가지 원칙

5.2 어떻게 연산을 지연시킬까

꼬리 재귀
recur를 이용한 자체 재귀
지연 시퀀스
시퀀스의 실현
머리를 쓰지 않기

5.3 더욱 게을러지기

커링과 부분 적용
5.4 다시 재귀로

상호 재귀를 재귀로 바꾸기
트램폴린을 이용한 상호 재귀
재귀를 평가 지연으로 바꾸기
메모이제이션을 이용해 재귀 호출을 줄이기

5.5 정리

 

6장 병행성

6.1 락의 문제
6.2 ref와 소프트웨어 트랜잭션 메모리(STM)

ref-set
트랜잭션의 속성
alter
STM의 작동원리: MVCC
commute
alter가 나을 경우도 있다
ref에 유효성 확인(validation) 추가

6.3 제어가 필요 없는, 동기화된 갱신에 애텀 사용하기
6.4 비동기적 갱신을 위한 에이전트

에이전트에 대한 유효성 확인과 에러 처리
트랜잭션에 에이전트를 포함시키기
일관성 있는 갱신 모델

6.5 var를 이용해 스레드별 상태 관리하기

원거리에서 영향을 끼친다는 것
자바 콜백 API

6. 6 클로저 스네이크

함수형 모델
STM을 이용한 상태 변화 모델링
스네이크 GUI
ref를 사용하지 않는 스네이크 게임

6.7 Lancet의 타깃이 한 번만 실행되도록 만들기

Lancet Step 3: runonce

6.8 정리

 

7장 매크로

7.1 언제 매크로를 사용해야 할까
7.2 제어 구조 매크로

특수 구문과 디자인 패턴 그리고 매크로
매크로의 전개(expansion)
when과 when-not

7.3 더 쉽게 매크로 작성하기

구문 따옴표, 평가 기호, 이음 평가 기호
매크로 안에서 이름 만들기

7.4 매크로의 분류

조건부 평가
var의 생성
자바와의 상호작용
평가 지연
구문 감싸기
불필요한 lambda 피하기

7.5 Lancet DSL 만들기

Lancet 타깃의 생성
앤트 태스크 정의하기
Lancet Step 4: DSL

7.6 정리

>H3>8장 다중 메서드

8.1 다중 메서드 없이 산다는 것
8.2 다중 메서드 정의하기

메서드 선택은 상속을 고려한다
디폴트 다중 메서드

8.3 다형성을 넘어서
8.4 자유로운 메서드 선택

임의의 타입들 사이에 상속 관계 만들기

8.5 언제 다중 메서드를 사용해야 할까

Inspector 라이브러리
test-is 라이브러리
예외

8.6 Lancet에 타입 강제 변환 추가하기

Lancet Step 5: 강제 타입 변환

8.7 요약

 

9장 세상 속의 클로저

9.1 테스트 자동화

: test를 이용한 테스트
test-is를 이용한 테스트
원하는 대로 테스트하기

9.2 데이터 접근

다른 라이브러리들

9.3 웹 개발

HTML 작성하기
Post와 Redirect
애플리케이션 광 내기

9.4 작별

부록 A 에디터 지원
부록 B 참고문헌

찾아보기