2009-09-20 63 views

回答

5

是 - 从完全功能的角度(如哈斯克尔实践),一切都是函数(Really everything)。

而且由于纯粹的功能语言不允许任何类型的变化,这个定义没有任何矛盾。

有什么区别吗?

那么,OCaml不是纯粹的功能。这意味着这些功能可以执行与恒定值定义不同的副作用。

这段代码(这里的F# - 但在Caml中非常相似)完全有效。

let name = 
    Console.Write("Enter your Name: ") 
    Console.ReadLine() 
+2

并且最后一个例子的观点是变量定义中的副作用只能执行一次 – newacct 2009-09-20 17:25:26

1

技术上,定义变量是模式匹配:

let [x] = someList 
let y::zs = someList 
let (Some z) = someOption 
let _ = someIgnoredExpr 
5

在非纯语言

let f() = expr 

let f = expr 

之间的差别在于'expr'的'效果'运行在ev处在前一种情况下为“呼叫站点”,在后一种情况下仅在定义站点一次。这是两者之间的少数差异之一,但也许是最重要的。