장바구니 담기 close

장바구니에 상품을 담았습니다.

하스켈로 배우는 함수형 프로그래밍 (컴퓨터/IT)

하스켈로 배우는 함수형 프로그래밍 (컴퓨터/IT) 간결학 올바른 코드 작성법을 배운다

  • 오카와 노리유키
  • |
  • 제이펍
  • |
  • 2015-08-21 출간
  • |
  • 508페이지
  • |
  • 170 X 225 mm
  • |
  • ISBN 9791185890296
★★★★★ 평점(10/10) | 리뷰(1)
판매가

30,000원

즉시할인가

27,000

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
27,000

이 상품은 품절된 상품입니다

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

목차

Chapter 0 [입문] 함수형 프로그래밍 ? “함수”의 세계 _ 2
0.1 함수형 프로그래밍, 그 전에 ― 실용 프로그램에서 활용하는 강점 알기 4
0.2 함수란 무엇인가? ― 명령형 언어의 함수와 무엇이 다른가? 5
0.3 함수형 프로그래밍이란 무엇인가? ― “프로그램이란 함수다”라는 관점 9
0.4 함수형 언어란? ― 함수가 1급(first class) 대상이다? 대입이 없다? 12
0.5 함수형 언어의 특징적인 기능 ― 타입의 유무, 정적/동적, 강약 20
0.6 왜 지금 함수형 언어인가? ― 추상화, 최적화, 병행/병렬화 28
0.7 함수형 언어와 함수형 프로그래밍의 관계 ― 강력한 성과를 끌어내기 위해서는 어떻게 하면 좋은가? 41
0.8 함수형 언어의 역사 ― 과거를 알고 미래 탐구하기 43
0.9 함수형 언어를 채용하는 장점 ― 선언적일 것, 제약의 충족 체크, 타입과 타입 검사, 타입 추론 49
0.10 이 책에서 다루는 함수형 언어 ― Haskell의 특징, 구현, 환경 구축 54
0.11 정리 60

Chapter 1 [비교를 통해 발견하기] 함수형 프로그래밍 ― C/C++, JavaScript, Ruby 그리고 Haskell _ 64
1.1 좌표 변환 ― 부품 조합하기 66
1.2 NULL considered harmful ― 10억 달러 단위의 실수 79
1.3 소수를 세기 ― 올바른 병렬화와 그 사양 변경 대응 90
1.4 구조화 데이터의 취급 ― Visitor 패턴 100
1.5 문자열의 이스케이프 ― 타입에 성질 갖게 하기 108
1.6 정리 118

Chapter 2 타입과 값 ? “타입”은 기본 중의 기본 _ 120
2.1 Prelude ― 기본 모듈 122
2.2 값 ― 조작의 대상 123
2.3 변수 ― 값의 추상화 129
2.4 타입 ― 값의 성질 132
2.5 타입 정의하기 ― 취급하는 성질의 결정 151
2.6 타입 클래스 ― 타입에 공통된 성질 165
2.7 정리 178

Chapter 3 함수 ? 함수 적용, 함수 합성, 함수 정의, 재귀 함수, 고차 함수 _ 180
3.1 함수 만들기 ― 기존의 함수로부터 만들기, 직접 새로운 함수 정의하기 182
3.2 함수 적용 ― 기존 함수의 인수에 값 부여하기 182
3.3 함수 합성 ― 기존의 함수 연결하기 188
3.4 Haskell의 소스 파일 ― 소스 파일에 함수를 정의하여 GHCi에서 읽어 보기 191
3.5 함수 정의 ― 패턴 매치와 가드 194
3.6 재귀 함수 ― 반복적인 행동을 정의하는 함수 213
3.7 고차 함수 ― 결과가 함수가 되는 함수, 인수로서 함수를 요구하는 함수 222
3.8 정리 234

Chapter 4 평가 전략 ? 지연 평가와 적극 평가 _ 236
4.1 지연 평가를 살펴보자 ― 유효하게 이용할 수 있는 예로부터 확실히 배우기 238
4.2 평가 전략 ― 지연 평가와 적극 평가의 구조, 장점 및 단점 256
4.3 평가 제어하기 ― 성능 튜닝을 위해서 269
4.4 정리 275

Chapter 5 모나드 ? 문맥을 지닌 계산을 다루기 위한 장치 _ 278
5.1 타입 클래스를 다시 한 번 살펴보기 ― 직접 만든다는 관점으로 280
5.2 모나드의 사용법 ― 문맥을 잘 취급하기 위한 타입 클래스 인터페이스 288
5.3 여러 가지 모나드 ― Identity, Maybe, 리스트, Reader, Writer, State, IO … 304
5.4 다른 언어에 있어서의 모나드 ― 모나드나 이와 유사한 기능의 서포트 상황 332
5.5 Haskell 프로그램의 컴파일 ― 컴파일해서 Hello, World! 337
5.6 정리 338

Chapter 6 추천하는 개발/설계 테크닉 ― “함수형/Haskell식”의 프로그램 설계/구현, 사고 _ 342
6.1 동작 결정하기 ― 테스트를 작성하자 344
6.2 하향식으로 생각하기 ― 문제를 큰 틀에서 파악하고 작은 문제로 분할해 나가기 349
6.3 제약 설계하기 ― 타입에 제약 갖게 하기 384
6.4 적절한 처리를 선택하게 하기 ― 타입과 타입 클래스를 적절하게 이용하여 타입에 제약 기억시키기 394
6.5 보다 복잡한 제어 부여하기 ― 매우 강력한 로직 퍼즐의 예 404
6.6 정리 415

Chapter 7 Haskell에 의한 제품 개발의 길 ? 패키지와의 교제 _ 418
7.1 패키지의 이용 ― 패키지 시스템 Cabal 420
7.2 패키지의 작성 ― 우선은 패키징해 두자 425
7.3 조직 내 개발 패키지의 취급 ― 이런저런 궁리 436
7.4 이용할 패키지의 선정 ― 의존 관계 지옥, 선정의 지침 440
7.5 의존 패키지의 버전 컨트롤 ― 패키지별로 어떤 버전을 선택할 것인가? 448
7.6 버전 간의 차이 흡수 ― 버전 간 변경점을 검출하는 것부터 453
7.7 정리 459

APPENDIX 부록 _ 461
A.1 함수형 언어를 사용하는 프로그래밍 콘테스트 사이트 ― 게임 감각으로 도전 462
A.2 읽어 둘 만한 참고문헌 ― 더 깊은 세계로… 469

찾아보기 .... 474

도서소개

함수형 프로그래밍의 에센스를 엄선하여 해설한다!
간결하고 올바른 코드 작성법을 배운다!
함수형 언어의 설계 방법과 사고방식, 그리고 다른 언어와의 비교 및 대조!


주요 명령형 언어의 최근 버전들은 함수형 프로그래밍의 핵심 요소들을 채택하고 있다. 사용 중인 언어의 새로운 기능을 제대로 활용하기 위해서 함수형 프로그래밍에 대한 학습이 선택이 아닌 필수가 되어 가고 있다. 그러나 함수형 프로그래밍의 사고방식은 잘 알려진 구조적 프로그래밍이나 객체지향 프로그래밍과는 크게 다른 면이 있어서 작성 방법을 알더라도 생각이 뒤따르지 않으면 그리 간단히 작성할 수 없는 것이 사실이다.

이 책은 함수형 언어인 하스켈(Haskell)의 최신 버전을 사용하면서 현업의 실무자들을 위해 자바 8, C++ 11, C, 자바스크립트, 루비 등의 각종 명령형 언어와의 차이를 설명하고, 언어마다 새로운 기능의 활용 방법과 주의점 등을 풍부하게 포함하였다. 또한, 하향식 사고법과 언어의 장점을 활용하는 기법도 단계적으로 소개한다. 부디 엔지니어 여러분에게 함수형 언어로 명령형 언어를 활용할 수 있는 실용적인 책이 되기를 바란다.

이 책의 대상 독자
■ 간결한 코드를 작성하고 싶은 분
■ 안전하고 버그 없는 올바른 코드를 설계하고 구현하고자 하는 분
■ 자바나 C++ 등 주요 명령형 언어의 새로운 기능과 함수형 언어와의 관계에 관심 있는 분

책속으로

함수형 프로그래밍에서 “함수”란 무엇일까? 명령형 언어에서 함수는 특정 명령/절차의 나열에 붙은 라벨에 지나지 않는다. 이에 반해 함수형 프로그래밍에서 함수는 “주어진 입력 값만으로 단지 하나의 출력되는 값을 결정하는 규칙”이라는 수학적 의미의 함수다. 예를 들어, 다음의 say.cpp의 say는 함수형 프로그래밍의 함수가 아니다. _6

함수형 언어는 명령형 언어와의 비교에서도 언급했듯이 파괴적인 대입 조작을 할 수 없거나 매우 제한적인 조건에서만 허용된다. 특히 순수 함수형 언어에서는 함수가 언제 어떻게 평가해도 같은 결과가 된다. 즉, 그 처리만 병렬화하여도 같은 결과가 된다는 것을 알고 있다. _39

다형적인 리스트의 타입 [a]는 타입 a를 []로 둘러싸서 만든다. 이와 같이 어느 타입에 붙여서 다른 타입을 만드는 것을 타입 생성자(type constructor)라고 한다. 참고로 다소 혼동이 있을 수도 있으나 타입의 []는 타입을 하나 둘러싸서 리스트로 하는 “리스트의 타입 생성자”이고, 값의 []는 “빈 리스트”임을 주의하길 바란다. _145

where절과 let식은 비슷한 것을 할 수 있지만, 스코프 및 구문상 외관 등이 다르다는 점에서 어느 쪽이 좋다고 말할 수 없다. 각각의 상황에 따라 선택되는 적절한 경우가 확실히 존재할 것이다. 스코프를 쓸데없이 넓히지 않는 것도 중요하고 가드를 걸쳐서 사용할 상황도 존재하는 것이 사실이기도 하다. _213

do 표기법에서는 명령형 언어로 명령을 순서대로 나열하도록 “모나드 액션”을 나열하여 작성한다. do 표기법은 구문이므로 결합성에 대해 프로그래머가 신경 쓰지 않지만, 분해가 발생하거나 하면 그 위치에 따라 결합성이 변화한다. 결합성이 변화해도 우리의 직관과 상반되는 결과가 발생하지 않는다는 것이 모나드 법칙에 의해 보장되어 있는 것이다. _303

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.