Title Text:The problem with Haskell is that it’s a language built on lazy evaluation and nobody’s actually called for it.<
Origin:https://xkcd.com/1312/
https://www.explainxkcd.com/wiki/index.php/1312:_Haskell
漫画在函数式编程语言Haskell中嘲笑。函数式编程语言基于函数的数学概念,即对函数的两次调用总是在给定相同输入的情况下产生相同的结果。函数调用的副作用是程序状态的更改或与外部世界的可观察交互,而不是返回值。举个简单的例子,如果sum函数改变了一个全局变量,或者在返回它之前打印了总和,则这些是副作用。大多数其他语言中的函数经常具有副作用,通常使它们难以分析。功能编程语言尽可能避免副作用。像Haskell这样的纯函数式编程语言通过类型系统(更具体地说,在Haskell的monad中)隔离不可避免的副作用(至少是输入/输出)推动了这个议程。
第一个笑话说Haskell只有没有副作用,因为没有人使用过Haskell程序。即使在像C这样的传统过程编程语言中,如果程序没有运行,也不会产生副作用。
在Haskell中,效果是一等值。这意味着您可以像使用任何值一样使用效果,将它们分配给变量,传递它们,或者操纵它们以产生新的和不同的效果。因此,技术上没有副作用,只有主要影响。
标题文本是关于Haskell懒惰评估的笑话。基本概念是在实际使用之前不计算值。因此,可以有一个代表整个Fibonacci数无限列表的名称。但是,在访问列表的特定元素之前,实际上不会完成任何工作。这个笑话在“被叫”(指的是调用一个函数)和“被叫”(请求)之间进行播放;因此Haskell可能有价值,但没有人调用它来获取该值或请求这样的语言。一个更简单的例子可能是:
或:: Bool – &gt;布尔 – &gt;布尔
或者真_ =真
或_ b = b
或(2 + 2 == 4)(偶数(斐波那契10000))
“或”函数被定义为正常函数,但可以在不计算第10000个斐波纳契数(一项令人生畏的任务)的情况下立即结束,因为第二个参数不是必需的:“真或其他”始终为真。
实际上,Haskell确实被积极使用,尽管它不是最受欢迎的语言之一。它特别适用于一些金融机构,安全意识的初创企业和网站(Haskell中有几个活跃的Web框架),如Randall自己的[1]。