strictness

    1熱度

    2回答

    這裏的評價是一個自定義length功能的經典第一次嘗試: length1 [] = 0 length1 (x:xs) = 1 + length1 xs ,這裏是一尾遞歸版本: length2 = length2' 0 where length2' n [] = n length2' n (x:xs) = length2' (n+1) xs 然而,(n+1)不會eval

    1熱度

    1回答

    (head . map f) xs = (f . head) xs 當f嚴格時,它適用於每個xs列表。 任何人都可以給我例子,爲什麼非嚴格的f它不工作?

    9熱度

    1回答

    對於我的another answer的所有值的時候,我寫了下面的代碼,提供diagonally traversedUniverse實例爲枚舉Generic S(它輕微地從這個版本有更新,但使用相同的邏輯): {-# LANGUAGE DeriveGeneric, TypeOperators, ScopedTypeVariables #-} {-# LANGUAGE FlexibleInstanc

    13熱度

    1回答

    以下 (&&) :: Bool -> Bool -> Bool False && _ = False True && False = False True && True = True 具有期望的短路特性False && undefined ≡ False。第一個條款在正確的論點中是非嚴格的,保證在任何其他嘗試之前被檢查。 很顯然,如果我改變了秩序,甚至uncurry功能 both ::

    12熱度

    1回答

    我一直在尋找一些Haskell的源代碼,並與!_跨越模式匹配來了,代碼是在這裏:http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.List.html#unsafeTake take n xs | 0 < n = unsafeTake n xs | otherwise = [] -- A version of

    10熱度

    2回答

    有人能幫我理解Wadler的論文「Comprehending Monads」的下列定義嗎? (摘錄爲3.2節/ 9頁,即,「嚴謹單子」小節。) 有時,有必要控制在懶惰官能方案評價的順序。這通常是與可計算函數嚴格實現,通過 嚴格定義˚FX =如果X≠⊥然後˚FX別的⊥。 在操作上,嚴格˚FX通過首先減少X到弱頭正常形式(WHNF),然後還原應用˚FX降低。另外,它是安全的,以減少X和˚FX並聯,但不

    0熱度

    2回答

    我創建了以下Haskell的主要功能(ghci中內)嚴格: let pi :: Int -> Int -> Int; pi 1 _ = 2; pi x y = if all (/=0) (map (rem y) [pi z 2| z <- [1..(x-1)]]) then y else pi x (y+1); 請不要介意秒/ memoized參數(它應該始終在2開出)。 當然,正如預期的

    2熱度

    1回答

    一半時這裏... https://en.wikibooks.org/wiki/Haskell/Laziness ...是一個鍛鍊問變化的影響,以替代實現head功能的使用無可辯駁圖案。它提供的head'如下的定義,並指出這將總是返回undefined由於第一方程式的無可辯駁的匹配: head' :: [a] -> a head' ~[] = undefined head' ~(x:xs) =

    6熱度

    1回答

    所以,Haskell seq函數強制評估它的第一個參數並返回第三個參數。因此它是一箇中綴操作符。如果你想強制對錶達式進行評估,直覺上這樣的特徵將是一元運算符。所以,與其 seq :: a -> b -> b 這將是 seq :: a -> a 因此,如果你想要的值是a,爲什麼返回b,你如何構建的b回報。顯然,我沒有想到Haskell。 :)

    1熱度

    2回答

    以下似乎工作(如:口口聲聲說Surely tomorrow每秒) import Control.Concurrent import Control.Concurrent.MVar import Control.Exception (evaluate) main :: IO() main = do godot <- newEmptyMVar forkIO $ do