我有Haskell模块优化的问题.
有主模块.
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.DeepSeq
import Formatting
import Formatting.Clock
import System.Clock
import Data.Array
size :: Int
size = 200 :: Int
stdMult :: (Ix a, Ix b, Ix c, Num d) =>
Array (a,b) d -> Array (b,c) d -> Array (a,c) d
stdMult x y = array resultBounds
[((i,j), sum [ x!(i,k) * y!(k,j) | k <- range (lj,uj)])
| i <- range (li,ui),
j <- range (lj',uj') ]
where ((li,lj),(ui,uj)) = bounds …Run Code Online (Sandbox Code Playgroud) 我玩严格的评估,向量和矩阵,得到了一个相当奇怪的结果.有以下代码:
module Test where
import qualified Data.Vector as V
import qualified Data.Matrix as M
import Control.DeepSeq
matrixCtor :: Int -> Int -> Int -> M.Matrix Int
matrixCtor x y size = M.matrix size size $ \(i,j) -> x*i+y*j
f :: M.Matrix Int -> M.Matrix Int
f b = c
where
n = M.nrows b
bt' = V.generate n $ \j -> M.getCol (j+1) b
c = M.matrix n n $ \(i,j) -> V.sum (V.unsafeIndex bt' (j-1))
Run Code Online (Sandbox Code Playgroud)
我将其加载到ghci并执行以下操作:
*Main Test> :set …Run Code Online (Sandbox Code Playgroud)