问题标签 [strictness]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 如何优化我的 Haskell,以免内存不足
对于在线算法课程,我正在尝试编写一个程序,该程序使用近似算法计算城市的旅行商距离:
- 在第一个城市开始游览。
- 反复访问该旅游尚未访问的最近城市。如果出现平局,请前往指数最低的最近城市。例如,如果第三和第五个城市与第一个城市的距离相同(并且比任何其他城市都近),那么游览应该从第一个城市到第三个城市开始。
- 一旦每个城市都被访问过一次,返回第一个城市完成游览。
我正在尝试在 Haskell 中编写一个解决方案,并且我让它在小型数据集上工作,但是它在大量输入时内存不足(该课程的输入约为 33000 个城市)
起初我将函数编写exec
为递归函数,而不是通过foldl'
. 我认为将其更改为使用会严格foldl'
解决我的问题。foldl'
但是,它似乎对内存使用没有影响。我尝试不使用优化和-O2
优化来编译我的程序。
我知道它必须以某种方式在内存中保留多个循环,因为我可以毫无问题地对 34000 个数字进行排序
我在这里到底做错了什么?
以防万一这里有什么用是parseInput
andbuildDistMap
函数,但它们不是我问题的根源
还有一些测试输入
haskell - 通过递归示例了解 Haskell 中的非严格性
就评价而言,这两者有什么区别?
为什么这“服从”(怎么说?)非严格性
虽然这没有?
是否可以非严格地编写尾递归函数?
老实说,我也不了解第一个示例的调用堆栈,因为我看不到它的h:
去向。有没有办法在 ghci 中看到这个?
haskell - NFData 应该有一个对偶吗?
Haskell 有一个名为的类型NFData
,其形状如下:
比“功能”更“数据”的类型可以配备NFData
. 每个这样的实例都会彻底分析该类型的给定值及其传递包含的任何内容。这迫使重击并爆炸潜在底部。
注意:有点神秘的是,即使是“函数式”类型也配备了实例,尽管它们实际上并没有将它们的参数简化为正常形式。
案例分析就这么多。但有时采取双重视角并考虑更类似于余数据而不是数据的事物是有用的。我们不想分析其案例的总和,而是希望建立一个记录到其领域。
因此,在对我在说什么没有任何真正想法的情况下,我可能会因此而蒙混过关,将遇到的任何箭头都转过来,并在几个选项中穿插Co
:
对于表示非严格字段的有限乘积的类型(粗略地说,“单一构造函数”类型),我期望以下形式的实例:
对于所有具有少于/多于一个构造函数的数据类型,我希望有以下形式的实例:
注意:这可能有点可疑,但如果我们不提供这些实例,我们将只使用()
与NFCodata
.
最终结果应该是这样的类型的派生实例:
行为如下:
这个想法是可以使用镜头Foo
来Bar
填充这个空脊的内容。
所以......问题:
- 上这样的课有意义吗?是否已经有某种方法可以获取带有底部内容的 codata 类型的“脊椎”?是否
NFCodata
已经以其他更原则的形式存在? - {NF}data 和 {NF}Codata 之间是否存在某种严格的类比?
- “NF”真的是“NFCodata”中使用的正确前缀吗?有没有更贴切的数学术语(更重要的是思维方式)适用于此?