当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 如何在haskell中使表(Data.Map)严格?

来源:互联网 收集:自由互联 发布时间:2021-06-22
为了学习 Haskell(漂亮的语言),我正在从 Spoj开始讨论问题. 我有一个包含19000个元素的表,在编译时都是已知的. 如何使用’seq’严格控制表格? 这是我的代码中的(强)简化示例. import qual
为了学习 Haskell(漂亮的语言),我正在从 Spoj开始讨论问题.

我有一个包含19000个元素的表,在编译时都是已知的.
如何使用’seq’严格控制表格?
这是我的代码中的(强)简化示例.

import qualified Data.Map as M

-- table = M.fromList . zip "a..z" $[1..]  --Upps, incorrect. sorry
table = M.fromList . zip ['a'..'z'] $[1..]
我想你正在寻找Control.DeepSeq中的deepseq,它用于强制完整评估数据结构.

它的类型签名是deepseq :: NFData a => a – > b – > b,它的工作原理是在返回第二个参数之前完全评估它的第一个参数.

table = t `deepseq` t
  where t = M.fromList . zip ['a'..'z'] $[1..]

请注意,这里仍然存在一些懒惰.在您尝试使用表之前,不会对表进行评估,但在此时将评估整个映射.

请注意,正如luqui指出的那样,Data.Map的键已经很严格了,所以这样做只有在你想让它的值严格时才有意义.

上一篇:cqrs查询性能
下一篇:WPF Textblock性能差
网友评论