我有以下功能:
millionsOfCombinations = [[a, b, c, d] |
a <- filter (...some filter...) someListOfAs,
b <- (...some other filter...) someListOfBs,
c <- someListOfCs, d <- someListOfDs]
aLotOfCombinationsOfCombinations = [[comb1, comb2, comb3] |
comb1 <- millionsOfCombinations,
comb2 <- millionsOfCombinations,
comb3 <- someList,
...around 10 function calls to find if
[comb1, comb2, comb3] is actually useful]
Run Code Online (Sandbox Code Playgroud)
评估millionsOfCombinations需要40秒.在一个非常快的工作站上.评估aLotOfCombinationsOfCombinations!! 0花了2天:-(
我怎样才能加快这段代码的速度?到目前为止,我有两个想法 - 使用分析器.myapp +RTS -sstderr在使用GHC编译后尝试运行,但得到一个空白的屏幕,并且不想等待它完成的几天.
第二个想法是以某种方式缓存millionsOfCombinations.我是否正确理解对于每个值aLotOfCombinationsOfCombinations,millionsOfCombinations多次评估?如果是这样,我该如何缓存结果?显然我刚刚开始学习Haskell.我知道有一种方法可以用monad进行调用缓存,但我仍然不理解这些东西.
我2小时前下载了WinHugs,仍然无法弄清楚如何声明简单的东西.我想按照书"7种语言在7个星期",但这样的东西let x = 10,并double x = x * 2给出了语法错误.
我刚看了一个会议演示录音.主持人正在使用VS 2010和ReSharper.他有一个快捷方式来运行光标所在的方法.怎么做?
谢谢