Re: purely functional (原 [問題] SCJP6.0)
※ 引述《godfat (godfat 真常)》之銘言:
: 果然出去吃個飯回來就斷線了 orz
: p 幣看來會少很多 :s
p 幣到底是什咩??
: 效率好不好嘛,上面是說效率很好,有人說效率有 C 的 1/2
: 我覺得像是這種本身就具有大量 state 的問題,
: purely functional 本身是不太可能比得贏 C 之類直接的操作啦...
其實就算不是 purely functional,絕大多數語言都比不贏 C 的啦。
: 回到 monad, 大抵上的概念就是我們把「狀態」視為一種值,
: 而每一次狀態改變,則會產生新的值,再把這個值繼續傳遞下去。
我覺得 godfat 這比喻不錯,我之前一直視 monad 是一種包裝。
: 就可以看成是:
: Y = puts("Hello, World!", X)
: Z = puts("Heelo, World!", Y)
其實上是
puts("Hello, World!")
會變成一個 function 輸入值 X
輸出值 Y
也就是說 puts("Hello, World!") 姑且稱做第一行
puts("Hello, World!") 姑且稱做第二行
第一行在 Haskell 會展開成類似
f(X) -> puts("Hello, World!"); return Y;
^^^^ ^^^^^^^^
這兩段是 Haskell 自動產生的
同理第二行是
g(Y) -> puts("Hello, World!"); return Z;
以上算自創語法,其實和 godfat 的說法一致啦
所以實際上會變成
g( f( X ) )
X : 前次系統狀態,系統自行代入
f ( X ) : 印出第一行的 Hello World ( 傳入值 X )
g ( f ( X ) ) : 印出第二行的 Hello World ( 傳入值 f (X) )
類似這樣的 :QQQ
不過如果這邊把 clojure 的 java-object 也當成一種 Monad 說不定也行,
只是 clojure 是動態語言,就算這樣做也沒實際影響 :QQ
: 這些 state 也不會影響到其他 state, 那在 compile 時,
: 基本上就可以完全捨棄掉。這就是最佳化要解決的問題了...
: 理想上當然是能把抽象化程式,依照目前機器架構,做最好的最佳化。
: 把所有多餘也不關心的操作都拿掉。GHC 本身就有很多很多的最佳化.. XD
GHC 算函式語言之中很不錯的了說 :QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.29.28.137
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):