[TIL🔥]Day8(8/11)
Introduction
今日は地縁性に陥った一日でした・・・
理解できないような気がする.だからもっと気がふさいでいる.でもやっぱりおもしろい!!
課題を続けてみるのは、やっぱり難しい😢
しかし、今日の勉強の準備も終わり、授業も粘り強くなりました.
週末はよく復習すべきかもしれません.
今日新しく学んだもの
遅延評価の概念はよく理解できるが,実際に使用するのは難しい.
データ中心の計画における遅延の評価(Lazy Evaluation)
1.rangeとL.range
2.mapとL.map
3.filterとL.filter
4.扁平とL.扁平
5.flatMapとL.flatMap
今日はrangeとL.rangeの比較で遅延評価を復習します.
🐢 rangeとL.rangeを比較して遅延を評価
評価の遅延
range
// 함수형 프로그래밍을 통한 range 구현
const range = l => {
let i = -1;
let res = [];
while(++i < l) {
res.push(i)
}
return res;
};
console.log(range(5)); // [0, 1, 2, 3, 4]
let list = range(4);
// 이미 list라는 값이 배열인 상태, 완전히 평가 완료
console.log(list); // [0, 1, 2, 3]
L.range
// 느긋한 L.range 구현
const L = {};
L.range = function *(l){
let i = -1;
while(++i < l) {
yield i;
}
};
let list = L.range(4);
console.log(list); // 아직 평가가 되어있지 않은 상태
console.log(list.next()) // {value: 0, done: false}
console.log(list.next()) // {value: 1, done: false}
console.log(list.next()) // {value: 0, done: false}
上のコードの結果を以下に示します.L.range jner layer関数を使用して、ウィジェット/ウィジェットを生成します.
したがって、listが出力されると、listはnext()が呼び出されると評価され、値が出力されます.
rangeとL.rangeの比較
range
-range(4)実行時に[0,1,2,3]の配列に完全に従って評価が完了しました
L.range
-L.range(4)として生成されたイテレーションをnext()に移動するたびに、値が計算されます(遅延評価)
rangeとL.rangeの性能テスト
// range와 L.range 성능 테스트
function test(name, time, f) {
console.time(name);
while (time--) f();
console.timeEnd(name);
}
test('range', 10, () => reduce(add, range(1000000)));
test('L.range', 10, () => reduce(add, L.range(1000000)));
差は大きくありませんが、L.rangeの方が効果的だと判断できます.
Comment
遅延評価の概念を初めて学び理解し、不思議に思った.
私はただ関数を配列として使う方法で、このように関数式のプログラミングで近似して、私は多くの新しいものを学びました.
課題にもしっかり応用して、身につけて、、、やってみます~💪
Reference
この問題について([TIL🔥]Day8(8/11)), 我々は、より多くの情報をここで見つけました https://velog.io/@dasssseul/TILDay8811テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol