PLT 板


LINE

看板 PLT  RSS
※ 引述《ilway25 (Nick)》之銘言: : ※ 引述《subtropical (風大雨大)》之銘言: : : 幾個問題請教大家 : : 1.所謂pure和impure的差別? : : 我的理解是: : : pure: Output跟input直接相關 可預測 : : impure: Output會受到環境的影響 不可預測 : : 但還是覺得不清不楚的... : : 2.有關exponential : : expt :: Integer -> Integer -> Integer : : expt x 0 = 1 : : expt x n = x * expt x (n-1) : : 這個方法好像需要用到很多空間? : : (原因是因為乘法迴圈的關係) : : 乘法是 n*(n-1)*(n-2)*..*1 -> n-1次嗎?? : : 書上有提到一位Dirk提出用even跟odd算expt的方法,怎麼用haskell表示呢? : 我也是 Haskell 新手,若有錯還麻煩指正 : 1. 可以看看這個 : http://stackoverflow.com/questions/4382223/pure-functional-language-haskell 這邊提到用 side-effect 來區分,其實不大有效,主要原因是 要嚴格定義 side-effect 有實務上的麻煩,這是依照抽象化的層次而定, 因為 CPU 內的 program counter (或 instruction pointer)會改變, 必須講清楚是語言內可見的範圍,但語言定義的 state 是什麼又是另一件事情了。 pure function 就是他跟數學上說的函數是一樣的, 給定同樣的輸入,輸出必然一樣。跟可不可預測無關。 impure function 則是給定同樣的輸入,至少存在兩個不一樣的結果。 所以並不是 C/C++ 的程式沒有 pure function, 而是所有的 Haskell function 都是 pure function。(這點其實尚有爭論) : 2. exponentiation 是密碼學中很重要的一環,因此有許多技巧可以來實作 : http://en.wikipedia.org/wiki/Exponentiation_by_squaring : 用even和odd的方法應該是上面文中的第一個: : 直接照抄實作可能如下 : expt :: Integer -> Integer -> Integer : expt x 1 = x : expt x n : | even n = expt (x * x) (div n 2) : | odd n = x * expt (x * x) (div n 2) : 也可以偷看 Haskell 自己的 (^) 怎麼實作 : http://www.haskell.org/onlinereport/standard-prelude.html : 你寫的 expt 的空間部份: : expt x n = x * (x * (x * ... * (x * 1))) : 所以 haskell 會展開很多項,直到能算 x * 1 = x,再往上算一層 x * (x * 1) : 一直到最後一層 其實 Haskell 不會展開成 x* (x * ... * (x * 1))) 才開始算, 實際上根據 lazy evaluation 應該是 x * expt x n -> x * x * expt x n -> x^2 * expt x (n -1) -> x^2 * x * expt x (n-2) -> ... -> x^n 但空間上還是 O(n), 因為每個 expt x n 都會被記錄下來直到某個上界為止, 超過上界的話就真的是 O(1) 了。 至於其他的實作方式則主要是減少時間複雜度,而不是處理空間複雜度。 根據記憶寫的,有錯的話請麻煩訂正。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 80.195.203.67
1F:推 ilway25:我覺得 lazy evaluation 不會知道結合律耶,但我不確定 12/12 10:27
2F:→ ilway25:我的認知是 如果第一個x是0,後面就不會再展開了 12/12 10:28
3F:→ Favonia:我想 impure 不代表一定存在兩個不一樣的結果 12/12 11:16
4F:→ xcycl:impure 是定義問題..不用 side effect 的話 12/13 05:04
5F:→ xcycl:非 pure 根據定義就是存在不同的結果 12/13 05:05
6F:→ xcycl:至於第二個是我的疏忽,不管是 inductive 12/13 05:38
7F:→ xcycl:的整數或是 Int 都不會這樣算 12/13 05:39
8F:→ xcycl:但若是 Int 的話,第一個是零還是會繼續展開 12/13 07:50
9F:→ xcycl:因為 * 是 primative operation 直接用底層的乘法運算定義的 12/13 07:51
10F:→ xcycl:http://ppt.cc/GtnC 可以看到 (*) :: Int -> Int -> Int 12/13 07:56
11F:→ ilway25:所以是只有像 True || (...) 才會不算了嗎 12/13 09:21
12F:→ xcycl:看機器的 or 跟 * 怎麼作,從語言層面上是這樣實作是一回事 12/13 17:10
13F:→ xcycl:晚點整理一下好了.. Haskell 有作 short circuit 12/13 18:02
14F:→ xcycl:evaluation 12/13 18:03
15F:推 SansWord:話說用tail recursion 會不會比較省空間? 12/14 00:27







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP