2009-09-20 45 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處在前一種情況下爲「呼叫站點」,在後一種情況下僅在定義站點一次。這是兩者之間的少數差異之一,但也許是最重要的。