Re: purely functional (原 [問題] SCJP6.0)

看板java作者 (Schelfaniel)時間16年前 (2009/08/05 18:39), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
※ 引述《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
文章代碼(AID): #1AUM5BOV (java)
討論串 (同標題文章)
文章代碼(AID): #1AUM5BOV (java)