strictness

    27熱度

    4回答

    這可能現在有點模糊,但我一直在想。要我與!知識,可以使構造值之前正在評估確定一個用於數據構造函數的參數: data Foo = Bar !Int !Float 我經常想,懶惰是一個偉大的事情。現在,當我通過消息來源時,我看到的更多的是比!更加頻繁的字段。 這有什麼好處,爲什麼我不應該讓它懶惰,因爲它是?

    23熱度

    3回答

    無盒類型,如Int#和嚴格函數,如f (!x) = ...,有些不同,但我看到概念上的相似性 - 它們以某種方式不允許thunk/laziness。如果Haskell是像Ocaml這樣嚴格的語言,那麼每個函數都將是嚴格的,每種類型都會被拆箱。拆箱類型和嚴格執行之間的關係是什麼?

    4熱度

    1回答

    我正在用Haskell線程進行測試,我遇到了在通道中傳遞延遲評估值的問題。例如,使用N個工作線程和1個輸出線程,工作人員交流未評估的工作,輸出線程最終爲他們完成工作。 我已經閱讀過有關這個問題的各種文檔,並看到了各種解決方案,但我只找到了一種可行的解決方案,其餘的都沒有。下面是一些代碼,其中工作線程開始一些可能需要很長時間的計算。我以降序啓動線程,以便第一個線程應該花費最長時間,而後面的線程應該提

    21熱度

    4回答

    我有一段代碼,使用sequence從一個概率分佈重複抽樣。道德上,它是這樣的: sampleMean :: MonadRandom m => Int -> m Float -> m Float sampleMean n dist = do xs <- sequence (replicate n dist) return (sum xs) 除了它有點複雜。我感興趣的實際代碼

    0熱度

    1回答

    我有這樣的代碼: divisors n = 1:[y|y<-[2..(n `div` 2)], n `mod` y == 0] writeList l = do print "Start" print l 的話,我想打電話給嚴格的參數的函數;我想: writeList $! (divisors 12345678) 和 (divisors 12345678) \`seq\

    2熱度

    3回答

    我有點卡住如何改寫遵循嚴格的評估列表解析使用seq,而不是爆炸模式: zipWith' f l1 l2 = [ f e1 e2 | (!e1, !e2) <- zip l1 l2 ] 任何想法? 我已經試過 zipWith' f l1 l2 = [ e1 `seq` e2 `seq` f e1 e2 | (e1, e2) <- zip l1 l2 ] 但遺憾的是並沒有強制評估WHNF。

    2熱度

    1回答

    爲Control.Parallel.Strategies的源代碼(http://hackage.haskell.org/packages/archive/parallel/3.1.0.1/doc/html/src/Control-Parallel-Strategies.html#Eval)包含輸入eval定義爲: data Eval a = Done a 它具有下列單子實例: instance

    3熱度

    1回答

    我正在編寫一個程序,它爲目錄中的每個映像文件創建一個包含一個命令的shell腳本。目錄中有667,944張圖片,所以我需要正確處理嚴格性/懶惰問題。 下面是一個簡單的例子,它給我Stack space overflow。如果我使用+RTS -Ksize -RTS給它更多的空間,它確實有效,但是應該能夠在內存很小的情況下運行,立即生成輸出。所以我一直在閱讀關於Haskell wiki和Haskell