作者noctem (noctem)
看板PLT
標題Re: [連結] 貼一個lazy eval的連接﹐非常淺顯易懂。
時間Wed Mar 21 15:04:21 2007
確實是因為很忙,看了之後拖了很久才回... :)
※ 引述《caml (suitengu)》之銘言:
: http://www.lassila.org/blog/archive/2006/05/fun_with_lazy_e_1.html
: 各位可以用sbcl, 或clisp試一下。
我僅是大略地看過一遍,蠻有意思的。感覺上這篇談的是讓
串列的 constructor 成為 lazy 的。補充一下:
1. Scheme 也有 delay/force 的成對「函數」. 不過追根究底
好像還是用 macro 做出來的。做 delay 的方法就是把運算
包到一個函數裡去。隨手找到一些資料:
http://oldwww.cs.aau.dk/~normark/prog3-03/html/notes/
eval-order_themes-delay-stream-section.html
Lisp 和 Scheme 對於 closure 的處理「好像」有所不同,
不知道 Lisp 的 delay/force 是否也這樣做。
2. 關於 lazy evaluation 有幾派做法:
a. 語言還是以 eager evaluation 為預設,認為如果需要
lazy evaluation 的話另外實作即可。例如 Scheme.
b. 只把 lazy evaluation 做在資料結構裡面。caml 提供的
這篇好像就是以這個方向為例?
c. 認為把 lazy evaluation 當作預設還是有好處。例如
Haskell.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.20.217
1F:推 caml:common lisp也是eager eval. 也許common lisp要標準化的函數 03/21 16:58
2F:→ caml:太多﹐所以沒有收錄delay和force。 03/21 17:00
3F:推 godfat:其實我一直在想,Lisp 好像沒什麼是不能模擬的? 03/22 20:20
4F:推 caml:lisp雖然很flexible, 但是沒人用。 呵呵 03/23 13:26
5F:推 buganini:有人用啊...只是比較少 03/23 19:35
6F:→ buganini:Maxima就是Lisp寫的 03/23 19:36
7F:推 yago01:Maxima 該不會是電腦代數軟體? 03/30 14:07