책소개
누가 코드를 이렇게 짜놨어?프로그래머들은 시간에 쫓기는 나머지, 어쩔 수 없이 제한된 용도로만 사용 가능한, 성장의 여지가 거의 없는 코드를 작성한다. 그로 인해 과거의 자신이 쌓은 벽에 가로막혀 코드를 새로 수정해야 하는 상황이 벌어지기도 한다. 하지만 최고의 시스템은 진화할 수 있는 유연성을 갖췄다. 기존 코드를 수정하는 대신 새 코드를 추가해 새로운 상황에 적응하는 가산적 프로그래밍을 활용한다. 이 책은 제럴드 제이 서스먼과 크리스 핸슨이 도합 100년이 넘는 프로그래밍 경험에서 발견한, 프로그래머가 막다른 골목을 피하는 데 도움이 되는 기법들을 담았다. 이 책은 동적으로 확장 가능한 일반적 프로시저처럼 극도로 강력하지만 잠재적으로 위험한 기법들도 소개한다. 각 장에는 연습문제와 리스프의 방언인 스킴으로 만들어진 예제 코드를 실었다. 천문 거리 계산에서 자동 미분, 어드벤처 게임에 이르기까지 다양한 예제를 살펴본다.
목차
제1장 자연과 설계의 유연성1.1 계산과 건축1.2 유연성을 위한 똑똑한 부품1.3 중복성과 축중성1.4 탐색 행동1.5 유연성의 비용제2장 영역 특화 언어(DSL)2.1 조합자2.2 정규표현식2.3 래퍼2.4 문제 영역의 추상화2.5 요약제3장 산술 주제의 변형들3.1 산술 연산의 조합3.2 확장성 있는 일반적 프로시저3.3 예제: 자동 미분3.4 효율적인 일반적 프로시저3.5 효율적인 사용자 정의 형식3.6 요약제4장 패턴 부합4.1 패턴4.2 항 재작성4.3 부합기의 설계4.4 통합 부합4.5 그래프상의 패턴 부합4.6 요약제5장 평가5.1 일반적 eval/apply 해석기5.2 비엄격 인수를 가진 프로시저5.3 실행 프로시저로의 컴파일5.4 탐색 행동5.5 바탕 후속 프로시저들의 노출5.6 큰 힘과 큰 책임제6장 계층화6.1 계층 활용6.2 계층화 구현6.3 계층적 산술6.4 값의 의존성 주해 추가6.5 계층화의 약속제7장 전파7.1 예제: 별과의 거리7.2 전파 메커니즘7.3 다중 대안 세계관7.4 값들의 병합7.5 가능한 세계 검색7.6 전파는 축중성을 가능하게 한다제8장 맺음말부록 A 지원 소프트웨어부록 B 스킴