我想表達序列操作使用委託構建lambda表達式在C# public delegate Lambda Lambda(Lambda x);
問題 g*f = λz.(g z = error) -> error, (f o g)z
其中 f o g = λz.f(g z)
是我不不知道如何編碼錯誤術語。 是否有任何的方式來表達它像真假術語或教會的數字嗎?
我正在嘗試爲處理lambda微積分的語言編寫一個小型編譯器。這是語言的模棱兩可的定義,我發現: E →^v . E | E E | (E) | v
符號^,(,)和v令牌。 ^表示lambda,v表示變量。 形式^ v.E的表達式是一個函數定義,其中v是函數的形式參數,E是它的主體。如果f和g是lambda表達式,那麼lambda表達式fg代表函數f對參數g的應用。 我試圖寫這個語言的明確語法
我已經定義了以下函數用於beta測試,但我不確定如何考慮自由變量受限的情況。 data Term = Variable Char | Lambda Char Term | Pair Term Term deriving (Show,Eq)
--substition
s[M:x]= if (s=x) then M else s
AB[M:x]= (A[M:x] B [x:M])
Lambda
我發現邁克戈登的功能性編程介紹Notes在網絡上,我試圖通過它。第9頁有這樣的疑問: Find an example to show that if V1 = V2 , then even if V2 is not free in E1,
it is not necessarily the case that:
(λ V1 V2 . E) E1 E2 = E [E1/V1][E2/V2]
在OCaml中,它是合法的,在.mli: val f : 'a -> 'a
val g : 'a -> 'a
和.ml: let f x = x
let g = f
在F# 然而,這個被拒絕: eta_expand.ml(2,5): error FS0034: Module 'Eta_expand' contains
val g : ('a -> 'a)
but its