K組合子是K := (λxy.x)並且固定點組合子是Y := λf.(λx.f x x) (λx.f x x)。我試圖計算YK: YK = (λx.Kxx)(λx.Kxx) = (λx.x)(λx.x) = (λx.x) = I
如此,因爲YK是K固定點:對於任何電子郵件 K(YK) = YK
KI = I
KIe = Ie = e
。但KIe應該等於I!
class Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
m >> n = m >>= \_ -> n
fail :: String -> m a
我從來沒有在類型類中看過方程(或函數聲明?)。爲什麼類型
重用lambda函數,我應該把這個代碼: f x y z = x^3 - g (x + g (y - g z) + g (z^2))
where g x = 2*x^2 + 10*x + 1
並重寫它沒有在那裏(或讓)。 他們的意思是把它與lambda函數寫(\ X - > ...) 我想重用的哈斯克爾lambda函數。有任何想法嗎?
(我確定這個網站上已經有這個答案了,但是搜索被C中的一個變量調用free()的概念所淹沒。)我遇到了「eta還原」這個術語,如果x是「M中不空閒」,則定義爲f x = M x ==> M。我的意思是,我認爲我理解它要說的內容的要點,看起來就像你將一個函數轉換爲無點風格時所做的一樣,但我不知道x是不是免費的限定詞意味着什麼。
可以通過高階函數在無類型lambda微積分中編碼各種類型。 Examples:
zero = λfx. x
one = λfx. fx
two = λfx. f(fx)
three = λfx. f(f(fx))
etc
true = λtf. t
false = λtf. f
tuple = λxyb. b x y
null = λp. p (λxy. false)