gpt4 book ai didi

haskell - 这是合法的 Haskell 代码吗?

转载 作者:行者123 更新时间:2023-12-01 07:05:16 24 4
gpt4 key购买 nike

GHC 可以顺利编译它,但在运行时却惨遭失败:

many_a x =
let
a = 2
in
let
a = 2*a
in
x*a

直觉上,这应该行不通。但 GHC 接受了它。

最佳答案

是的,这是有效的 Haskell 代码。问题是a在第二个 let...in表达式实际上是一个新的a ;通过定义具有相同名称的新变量来隐藏现有变量是完全允许的。但是,它不会影响外部 a 的值。 .然而,由于潜在的混淆和错误,它通常被认为是不好的风格;如果你通过 -Wall到 GHC,如果您这样做,它会发出警告。

它在运行时“失败”,因为您已经定义了 a成为 2*a ,这会导致运行时无限循环。这是因为懒惰;基本上,(*)在将它们相乘之前评估它的两个参数。正在评估 2当然,工作正常,但评估 a导致它再次经历同样的过程。允许无限列表(如 ones = 1:ones )的同一件事使此代码成为无限循环。

关于haskell - 这是合法的 Haskell 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9760373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com