[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


    遅延評価の概念を初めて学び理解し、不思議に思った.
    私はただ関数を配列として使う方法で、このように関数式のプログラミングで近似して、私は多くの新しいものを学びました.
    課題にもしっかり応用して、身につけて、、、やってみます~💪