전체 글

import { Dream } from "future";
map, filter 결합법칙 특정한 방식으로 다르게 평가 순서를 바꿔도 똑같은 결과를 만든다는 결합 법칙을 가진다. 사용하는 데이터가 무엇이든지, 사용하는 보조 함수가 순수 함수라면 무엇이든지 아래와 같이 결합한다면 둘 다 결과가 같게 출력된다. [[mapping, mapping], [filtering, filtering], [mapping, mapping]] = [[mapping, filtering, mapping], [mapping, filtering, mapping]] 즉시 평가하지 않고 지연 평가를 하기 때문에, mapping -> filtering -> mapping의 과정은 동일하게 처리되게 된다. 가로로 계산을 진행하는 것이나, 세로로 하나하나 함수를 거치는 것이나 동일하게 처리된다. 지연..
const L = {}; L.range = function *(l) { let i = -1; while (++i < l) yield i; }; L.map = curry(function *(f, iter) { iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).done) { const a = cur.value; yield f(a); } }); L.filter = curry(function *(f, iter) { iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).done) { const a = cur.value; if (f(a)) yield a; } }; const..
reduce, map, filter, take, reduce 중첩 사용 우선 지금까지 만들어 뒀던 함수들은 다음과 같다. const curry = f => (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._); const range = l => { let i = -1; const res = []; while (++i { const res = []; for (const a of iter) res.push(f(a)); return res; }; const filter = curry((f, iter) => { const res = []; for (..
이터러블 중심 프로그래밍에서의 지연 평가 (Lazy Evaluation) 지연 평가라는 게으른 평가라고도 하지만, 영리한 평가로도 불리며 혹은 제때 계산법이라고도 칭한다. 가장 필요한 때까지 평가를 미루다가 필요한 순간 코드를 평가하면서 값들을 만들어 나가는 기법이다. 배열을 미리 만들어 두는 등 사전에 값을 평가해 준비하는 것이 아니라 reduce와 같이 평가가 필요한 함수를 만났을 때, 배열 안에 있는 값들을 순회하면서 값을 평가하는 것을 최소화하고 연산을 줄이는 것에서 장점이 있다. 장사를 하는 것에 비유하자면, 미리 음식을 다 만들어 놓았을 때 다 판매하지 못하면 시간과 돈을 버리게 되지만, 밀키트나 냉동식품을 주문이 들어왔을 때 조리하면서 장사를 하면 더욱 효율적으로 매상을 높일 수 있는 것과 ..
턴태
턴태의 밑바닥부터 시작하는 de-vlog