微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

斯卡拉在哈斯克尔的风格

Scala中,我可以表达一个函数,每次引用它时都会对它进行评估:

def function = 1 + 2 + 3

或仅评估一次的val

val val1 = 1 + 2 + 3

即使我多次打电话.

当然,在Haskell中,我可以定义一个函数(当我调用它时,它会反复评估):

function = 1 + 2 + 3

我可以在Haskell中定义Scala的val模拟吗?

更新:问题不在于懒惰的评估.

UPDATE2:

将评估函数值的次数

function = 1 + 2 + 3
main = do
        print function
        print function
        print function

解决方法

Haskell没有指定很多方法来控制次数或命令事物的评估.也就是说,GHC最多评估一次 CAFs(除非它们是类型多态).注意,对于(认)单态性限制,函数= 1 2 3将函数定义为单态CAF,因此函数最多被评估一次.

您还会发现许多人反对将此称为函数,因为除非您做了一些非常奇特的事情,否则它不是一个函数. (其类型中没有箭头.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐