Sev*_*Sev 6 alias haskell scope
我试图弄清楚Haskell是使用动态还是静态范围.我意识到,例如,如果你定义:
let x = 10
Run Code Online (Sandbox Code Playgroud)
然后定义功能
let square x = x*x
Run Code Online (Sandbox Code Playgroud)
你有2个不同的"x",这是否意味着它是动态范围的?如果没有,它使用什么范围,为什么?
此外,Haskell变量是否具有别名(相同内存位置/值的不同名称)?
谢谢.
oll*_*iej 12
Haskell(大体上说)使用与大多数其他语言完全相同的词汇范围.
例如.
x = 10
Run Code Online (Sandbox Code Playgroud)
x导致在全局范围中引用的值,而
square x = x * x
Run Code Online (Sandbox Code Playgroud)
将导致x词法范围到功能方块.如果您认为上述形式是一种语法精确,它可能会有所帮助:
square = \ x -> x * x
Run Code Online (Sandbox Code Playgroud)
至于你的另一个问题,我不确定你的别名是什么意思
你的陈述有些不对劲......
在你的榜样,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
Run Code Online (Sandbox Code Playgroud)
仅回答问题的第二部分:
对于相同的"内存位置",您可以有多个别名,但由于它们都是不可变的,因此大多数情况下并不重要.
愚蠢的例子:
foo x y = x * y
bar z = foo z z
Run Code Online (Sandbox Code Playgroud)
当内foo从叫bar,都x和y显然是相同的值.但既然你不能修改,x或者y你甚至都不会注意到.
| 归档时间: |
|
| 查看次数: |
8747 次 |
| 最近记录: |