我有两种数据类型,第二种是第一种副本,但每个字段都有Maybe.
data A = {a :: Int, b :: String}
data B = {c :: Maybe Int, d :: Maybe String}
Run Code Online (Sandbox Code Playgroud)
有没有办法发挥作用
f :: A -> B
g :: B -> A -> A
Run Code Online (Sandbox Code Playgroud)
对领域本身没有任何了解?(如果第一个参数的值为nothing,g则将从第二个参数中取默认值)
我需要乘以[2 ^ 14 x 2 ^ 14]个矩阵.但首先,让我们谈谈[2 ^ 12 x 2 ^ 12]矩阵.我需要多少内存?假设它是双矩阵,所以我需要8个字节用于一个元素.
((2 ^ 12*2 ^ 12*8)/ 2 ^ 20)*3 = 384 MiB
这是最糟糕的情况,当我需要将所有三个矩阵存储在内存中时.
haskell需要多少内存?让我们来看看.
-> let m n = matrix (2^n) (2^n) ( \(i, j) -> (fromIntegral i) * (fromIntegral j) ) :: Matrix Double
-> let p n = let r = m n in multStd2 r r ! (n,n)
-> p 12
3.299742941184e12
(4.84 secs, 1,991,404,304 bytes)
Run Code Online (Sandbox Code Playgroud)
它是~2 GiB.为什么这么糟糕,除了使用C++我该怎么办?
UPD:
我正在使用标准的haskell的Data.Matrix模块.