当前位置:  开发笔记 > 编程语言 > 正文

Haskell使用什么类型的范围?

如何解决《Haskell使用什么类型的范围?》经验,为你挑选了3个好方法。

我试图弄清楚Haskell是使用动态还是静态范围.我意识到,例如,如果你定义:

let x = 10

然后定义功能

let square x = x*x

你有2个不同的"x",这是否意味着它是动态范围的?如果没有,它使用什么范围,为什么?

此外,Haskell变量是否具有别名(相同内存位置/值的不同名称)?

谢谢.



1> olliej..:

Haskell(大体上说)使用与大多数其他语言完全相同的词汇范围.

例如.

x = 10

x导致在全局范围中引用的值,而

square x = x * x

将导致x词法范围到功能方块.如果您认为上述形式是一种语法精确,它可能会有所帮助:

square = \ x -> x * x

至于你的另一个问题,我不确定你的别名是什么意思



2> igorgue..:

你的陈述有些不对劲......

Haskell中没有可变变量只是定义(或不​​可变变量)

可变内存位置是Haskell中不存在的概念

在你的榜样,X不是 10的功能仅仅是广场,可以采取任何值参数在这种情况下,10只是在这种情况下(可以指定稍后的类型).

以下是Curt Sampson提供的别名示例:

import Data.IORef

main :: IO ()
main = do x <- newIORef 0         -- write 0 into x
          readIORef x >>= print   -- x contains 0
          let y = x
          readIORef y >>= print   -- y contains 0
          writeIORef x 42         -- write 42 into x
          readIORef y >>= print   -- y contains 42


当然Haskell有变量.见http://stackoverflow.com/questions/993124/does-haskell-have-variables/993126
igorgue,如果您认为Haskell没有变量,请在上面链接的问题上回答问题,告诉我们为什么没有.在`fx = x*2`中包含`x`的"定义".
不,它没有变量!,"定义"是正确的术语,或者如果你喜欢调用它们变量,那么就像在Erlang中一样是不可变的变量.这仍然与"变量"的命令概念截然不同.

3> CesarB..:

仅回答问题的第二部分:

对于相同的"内存位置",您可以有多个别名,但由于它们都是不可变的,因此大多数情况下并不重要.

愚蠢的例子:

foo x y = x * y
bar z = foo z z

当内foo从叫bar,都xy显然是相同的值.但既然你不能修改,x或者y你甚至都不会注意到.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有