Dla list leniwych można zdefiniować funkcjonały podobne do tych, jakie zdefiniowaliśmy dla zwykłych list, np. Imap.
# let rec Imap f = function
LNil -> LNil
| LCons(x,xf) -> LCons(f x, function () -> Imap f (xf()) ) val Imap : ('a -> 'b) -> 'a llist -> 'b llist = <fun>
# let sqr_llist = Imap (function x -> x*x);; val sqr_llist : int llist -> int llist = <fun>
# Itakę (6, sqr_llist (lfrom 3));;
- : int list = [9; 16; 25; 36; 49; 64]
Zdzisław Spławski
Programowanie funkcyjr
7