以下代碼是lambda演算解釋器。 我無法讓程序將代碼的結果打印到console.log。 class Token {
// type should be one of the valid token types listed
// below, and value is an optional value that can carry
// any extra in
想象一下,使用標準化(包括lambda下的替換)作爲「優化」的類型化lambda演算(排除一個非常痛苦的非終止和隱式遞歸問題)的樸素編譯器。 對於大多數或全部變量僅使用一次的簡單程序,規範化導致程序既短又快。 對我來說這是「明顯的」,總的來說這不是一個好主意。也就是說,由於規範化會減少共享,因此優化會導致條款惡化。 2個乘法 \x -> let a = x * x in a * a
術語被 「
所有: 我怎麼能寫在 「咖喱」 語法如下: let y = 2 in
let f x = x + y in
let f x = let y = 3 in f y in
f 5
我在第一次嘗試這樣的事情: (y -> (f -> ((f x -> f 5) (y -> f y) 3)) x + y) 2
但是,這似乎並沒有正確評估。 更好的是,Lambda表達式可以看到綁定。 謝謝!
我仍在嘗試瞭解OCaml中的值限制,並通過Wright's paper進行了解讀。並且在其中,(fun x -> x) (fun y -> y)不是一個語法值,它也表示lambda表達式應該是一個值。我在這裏有點困惑,是不是id id其本質上也是lambda表達式?在OCaml中真正算作語法值的是什麼? 我也試圖在utop,發現這些: utop # let x = let x = (fun y -
在維基百科中,bottom type被簡單地定義爲「沒有值的類型」。但是,如果b是這種空白類型,那麼產品類型(b,b)也沒有值,但似乎與b不同。我同意底部是無人居住的,但我不認爲這個屬性足以定義它。 通過Curry-Howard correspondence,底部與數學錯誤相關聯。現在有一個邏輯原則,說明False遵循任何命題。通過庫裏霍華德,這意味着類型forall a. bottom -> a