相关疑难解决方法(0)

如何在Haskell中强制评估?

我对Haskell相对较新,我正在尝试学习如何使用do符号按顺序执行不同的操作.特别是,我正在编写一个程序来对算法进行基准测试(一个函数)

foo :: [String] -> [String]
Run Code Online (Sandbox Code Playgroud)

为此,我想写一个像这样的函数

import System.CPUTime

benchmark :: [String] -> IO Integer
benchmark inputList = do
                         start <- getCPUTime
                         let r = foo inputList
                         end <- getCPUTime
                         return (end - start) -- Possible conversion needed.
Run Code Online (Sandbox Code Playgroud)

最后一行可能需要转换(例如,毫秒),但这不是这个问题的主题.

这是衡量在某个参数inputList上计算函数foo所需时间的正确方法吗?

换句话说,foo inputListend <- getCPUTime执行操作之前,表达式是否会完全减少?或者r只会被束缚foo inputList

更一般地说,如何在执行某些操作之前确保完全评估表达式?


这个问题几个月前被问到程序员(见这里)并在那里得到了一个可接受的答案,但它已被关闭为主题,因为它属于堆栈溢出.问题无法移动到堆栈溢出,因为它超过60天.因此,与主持人达成一致意见,我在此处重新提出问题并自行发布已接受的问题,因为我认为它包含一些有用的信息.

haskell lazy-evaluation

26
推荐指数
2
解决办法
1万
查看次数

标签 统计

haskell ×1

lazy-evaluation ×1