小编Dom*_*mpf的帖子

GHC的垃圾收集RTS选项

我有一个Haskell程序,它处理一个文本文件并构建一个Map(有几百万个元素).整件事可以运行2-3分钟.我发现调整-H和-A选项会对运行时间产生很大影响.

有关于RTS的这个功能的文档,但是对我来说这是一个很难读的,因为我不知道GC理论的算法和术语.我正在寻找一个技术性较低的解释,最好是针对Haskell/GHC.是否有关于为这些选项选择合理值的参考?

编辑:这是代码,它为给定的单词列表构建一个trie.

buildTrie :: [B.ByteString] -> MyDFA 
buildTrie l = fst3 $ foldl' step (emptyDFA, B.empty, 1) $ sort $ map B.reverse l where
    step :: (MyDFA , B.ByteString, Int) -> B.ByteString -> (MyDFA , B.ByteString, Int)
    step (dfa, lastWord, newIndex) newWord = (insertNewStates, newWord, newIndex + B.length newSuffix) where            
        (pref, lastSuffix, newSuffix) = splitPrefix lastWord newWord
        branchPoint = transStar dfa pref

        --new state labels for the newSuffix path
        newStates = [newIndex .. newIndex + …
Run Code Online (Sandbox Code Playgroud)

performance garbage-collection haskell ghc

38
推荐指数
2
解决办法
8549
查看次数

在Haskell中解析并漂亮地打印相同的文件格式

我想知道,如果在Haskell中有一个标准的,规范的方式,不仅要编写特定文件格式的解析器,还要编写一个编写器.

在我的例子中,我需要解析一个数据文件进行分析.但是,我还模拟要分析的数据并将其保存为相同的文件格式.我现在可以使用Parsec或类似的东西编写解析器,并编写以所需方式执行文本输出的函数,但每当我更改文件格式时,我都必须在代码中更改两个函数.有没有更好的方法来实现这一目标?

谢谢你,多米尼克

parsing haskell parsec file-writing

10
推荐指数
1
解决办法
293
查看次数

哈斯克尔 执行where子句

我正在分析where子句对Haskell程序性能的影响。

Haskell的Thomspson函数编程技巧第20.4章中,我找到了以下示例:

exam1 :: Int -> [Int]
exam1 n = [1 .. n] ++ [1 .. n]

exam2 :: Int -> [Int]
exam2 n = list ++ list
  where list = [1 .. n]
Run Code Online (Sandbox Code Playgroud)

我引用

计算[exam1]所需的时间为O(n),使用的空间为O(1),但是我们将不得不计算[1 .. n] 两次表达式。

...

[exam2]的作用是只计算[1 .. n]一次列表,以便我们在计算完列表后保存其值,以便能够再次使用它。

...

如果我们通过在where子句中引用某些内容来保存某些内容,则必须支付其占用空间的罚款。

因此,我疯狂地认为-O2标志必须处理此问题并为我选择最佳行为。我使用Criterion分析了这两个示例的时间复杂性。

import Criterion.Main

exam1 :: Int -> [Int]
exam1 n = [1 .. n] ++ [1 .. n]

exam2 …
Run Code Online (Sandbox Code Playgroud)

performance haskell time-complexity space-complexity

6
推荐指数
1
解决办法
112
查看次数

Haskell类型类'Real'是否用词不当?

我试图理解Haskell中的数字类型类层次结构.基本数字类型是

class Num a where
...
Run Code Online (Sandbox Code Playgroud)

作为旁注,根据我的一些资料(幻灯片),它实际应该是

class Eq a => Num a where
...
Run Code Online (Sandbox Code Playgroud)

但我在序曲中找不到这个.

现在,我对Real类型类感兴趣

class (Num a, Ord a) => Real a where
  -- the rational equivalent of its real argument with full precision
  toRational :: a -> Rational
Run Code Online (Sandbox Code Playgroud)

我想这Real指的是实例的类型Real并不复杂.但是我对Real数学中的一个数字的理解是它可以是理性的非理性的,所以它们并不等同toRational于所有这些.当然,不合理的数字无论如何也不能用于计算机......

谢谢!

haskell types typeclass

4
推荐指数
2
解决办法
157
查看次数