데이터 추상화는 추상화 된 그 연산들 만으로 데이터를 조작한다는 개념이 있다.
이와 같은 이유로 추상화로 나눠진 단계마다 추상화 장벽이 생긴다.
자료구조를 사용하면 해당 모든 프로그램을 수정해야 하지만 추상화를 해논 상태는 원시 데이터만 수정해야 하므로 유지보수에 용이하다
1장 내용 요약인듯
function (p) = > { return dis
play("(" + stringify(x_p(p)) + ", " +stringify(y_p(p)) + ")" ); }
선분의 중점을 표현해주는 함수
p는 x,y값이니 [x,y]라는 array가 들어갈태니
let x_p = (p) = > p[0]?p[0] : p;
let x_y = (p) = > p[0]&&p[1] ? p[1] : p;
이렇게 짜면 제대로 돌아간다
쌍 객체에서 pair , head, tail을 구해보자
let pair = (x, y) => {
let dispatch = (m) => {
return m === 0 ? x : m === 1 ? y : console.err(m, "args not 0, 1");
};
return dispatch;
};
let head = (e) => e(0);
let head2 = (e) => e(1);
console.log(head(pair)(3, 4), "sec", head2(pair)(3, 4));
function pair(x, y) {
return m => m(x,y)
}
function head(z) {
return z((p,q) => p )
}
당연히 tail은
function head(z) {
return z((p,q) = > q)
}
예제 2.6 처치 수 를 비슷한 방식으로 구현
const zero = (f) => (x) => x;
const one = (f) => (x) => f(x);
const two = (f) => (x) => f(f(x));
이런식으로 덧셈을 구현한다면
function add(a,b){
return a => b => f => x => a(f)(b(f)(x))
}
함수형 프로그래밍 어렵다.