tag:blogger.com,1999:blog-11395554.post3265856954769578208..comments2023-04-03T22:01:02.122+08:00Comments on Lambda Mind: Haskell Pratice - Primeyen3http://www.blogger.com/profile/09160610856837426907noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-11395554.post-26204039438781993062010-03-09T19:38:54.675+08:002010-03-09T19:38:54.675+08:00很熱血的寫了第二篇,也體認到自己練習不足的問題,謝謝老師 !很熱血的寫了<a href="http://yen3rc.blogspot.com/2010/03/haskell-practice-prime-2.html" rel="nofollow">第二篇</a>,也體認到自己練習不足的問題,謝謝老師 !yen3https://www.blogger.com/profile/09160610856837426907noreply@blogger.comtag:blogger.com,1999:blog-11395554.post-71288166332563634862010-03-09T10:27:52.785+08:002010-03-09T10:27:52.785+08:00Interesting code :). Some comments:
1. 如你所說 isPri...Interesting code :). Some comments:<br /><br />1. 如你所說 isPrime 是 map 加上 foldr (不過這個 isPrime 測的好像是「不是質數」?)。另外,makePrimeList 是 filter. <br /><br />2. 其實 (&&) 這個 operator 碰到第一個參數是 False 的時候也並不會去算第二個。isPrime2 和 isPrime 的另一個不同點是碰到 y < sq 就停下來吧?這也可以用先做一個 takeWhile 達成。<br /><br />3. 用 makeList 的版本為什麼比較慢不能馬上斷定,一個猜測是和 x ++ [c] 有關係。串列的 (++) 花的時間和第一個參數的長度成正比,所以每產生一個新的 c 都得從最開頭把這個串列旅行一遍。<br /><br />另外,由於 makeList 是 tail recursive 的,makePrimeList 必須等到整個 6n+1 6n+5 的串列產生完畢後才能動作。(比較之下 makePrimeList_2 則可以隨到隨做,[2..x] 這個 list 的元素生出來、測試過後,就丟掉了,並不佔空間。)不知道 makeList 會不會使得 heap 使用量變大,GC 變多,程式就慢了。你可寫一個不是 tail recursive 的 makeList 試試看嗎?scmhttp://www.iis.sinica.edu.tw/~scm/ncsnoreply@blogger.com