Lazy Evaluation di Haskell
Penjelasan
Haskell bersifat LAZY — sebuah ekspresi baru benar-benar dihitung (dievaluasi) ketika NILAINYA benar-benar dibutuhkan, bukan langsung saat didefinisikan. Ini memungkinkan hal yang mustahil di bahasa strict (seperti kebanyakan bahasa lain): mendefinisikan list TAK TERHINGGA, karena Haskell hanya menghitung elemen yang benar-benar diminta.
Contoh Konsep
-- List tak terhingga, aman karena lazy evaluation
semuaAngka :: [Integer]
semuaAngka = [1..]
-- Hanya menghitung 5 elemen pertama, tidak mencoba menghitung SEMUA angka
take 5 semuaAngka -- [1, 2, 3, 4, 5]
-- Fibonacci tak terhingga, dihitung lazy
fibs :: [Integer]
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
take 8 fibs -- [0, 1, 1, 2, 3, 5, 8, 13]
Praktikum
Buat list tak terhingga kelipatanLima berisi semua kelipatan 5 dari [5, 10..], lalu ambil 6 elemen pertamanya dengan take.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Lazy evaluation berarti kamu bisa mendefinisikan struktur data "potensial tak terhingga" tanpa takut program hang — Haskell hanya menghitung sebanyak yang benar-benar dipakai, kapan pun itu dibutuhkan.