함수적 자료구조 - List (2)

Jason Kim·2020년 5월 4일
0

이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습한 내용을 정리하고 있습니다.

패턴 매칭

표현식의 구조를 따라 내려가면서 그 구조의 부분 표현식을 추출하는 복잡한 switch문과 비슷하게 작동한다. 고 책에서는 이야기하고 있다.

TypeScript에서는 이런 구문을 지원하지 않으니 앞서 언급한 _tag와 같은 type 식별자와 복잡한 switch문을 사용하면 비슷한게 흉내낼수는 있다.

패턴 매칭에는 structurally equivalent가 사용된다.

함수적 자료구조의 자료 공유

자료구조에 연산이 가해져도 기존의 참고들이 변하지 않기 때문에 영속적이다. 자료가 변하거나 깨지지 않기 때문에 방어적으로 복사본을 만들지 않아도 안전하다. 따라서 데이터를 다른 연산들과 공유해도 아무 문제가 없다.

연습문제 3.2 ~ 3.6

https://github.com/JsonKim/fpinscala-with-typescript/compare/e191ea37c22d86315125ce776cae8e69e3ed2c19...1b7396f17b89850a08c5a76eaa2a13060da8bdae

자료구조의 효율성

List의 경우 뒷쪽의 데이터를 재사용하는것은 효율이 좋지만, tail을 치환할때는 반드시 이전의 모든 Cons를 복사해야 하기 때문에 효율적이지 않다. 다루고자하는 연산에 맞는 자료구조를 선택해야한다.

형식추론 개선

스칼라의 경우 적당히 partial function으로 만들어어야 dropWhile과 같은 함수를 사용할 때 명시적인 형식 지정 없이도 타입 추론이 가능하다고 한다. TypeScript의 경우는 튜플 형태의 dropWhile도 잘 추론해주고 있다.

0개의 댓글