本着问题中其他常见错误的精神,Haskell程序员最常犯的错误是什么?我一直在教自己Haskell一段时间,我开始对语言感到很自在,开始在现实世界中应用它。
答案 0 :(得分:15)
我所知道的最常见的错误是通过延迟评估引入空间泄漏。有很多方法可以实现这个错误,但是特别指出程序员具有其他功能编程经验的方法是将结果放在累积参数中,认为累积参数将占用恒定的空间。在许多情况下,累积参数需要线性空间,因为不评估参数。
另一个常见错误是忘记let
总是递归。无意的
let x = ... x ...
会导致莫名其妙的结果。
大多数其他常见的错误体验不是表现为错误,而是表示程序通过类型检查程序,或者难以理解monadic I / O模型。列表推导和do
符号的困难偶尔会出现。
一般来说,开始使用Haskell程序员所面临的困难包括
IO
monad 答案 1 :(得分:8)
开始 Haskell程序员的常见错误是forget the difference between constructor and type namespaces。这是一个初学者的错误,我很尴尬地把我的名字附加到它上面,但我很有信心,当他们遇到类似的问题时,其他人会偶然发现这个答案,所以不妨把它放在那里。 / p>
答案 2 :(得分:4)
[]
和[[]]
之间的区别:空列表和包含1个元素的列表,即空列表。这个特别是在递归函数的基本情况下弹出。
答案 3 :(得分:-1)
使用非尾递归函数或不发生堆栈溢出的严格折叠。
答案 4 :(得分:-1)
表达的概念对于初学者来说是相当混乱的。采用命令式编程语言中的条件结构。它只是一个构造,但在Haskell中它是一个表达式。因此if条件必须具有匹配的else,并且两者都必须产生相同类型的评估的值。
wrongFunc n = if n > 18
then 1
else False
if块计算整数,其中else返回bool。这是一个常见错误,因为在Haskell中它们不仅仅是语句块而是表达式。