我不會只直線上升寫答案,因爲這似乎是某種形式的分配/功課。所以我只會解釋一下lambdas是如何工作的。
讓我們一個基本的Lambda和打破它: \a b -> a
箭頭的左側(在這種情況下,B),我們有爭論。這些是傳遞給lambda的。
上的箭頭的右側,我們有輸出(在這種情況下)。所以這個lambda所做的是取兩個值,並給你第一個值。
輸出例如可以是任何表達式,如果我們限制A和B是數字那麼我們可以有這麼myLambda = \a b -> a + b
會myLambda 1 2
輸出3.
所以你定義轉換爲Lambda表達式只是把你的if then else
語句和有那些作爲lambda中的箭頭之後的表達式。
你也可以使用在最初的定義中使用模式匹配你給,轉換至拉姆達與case of
聲明。這需要在case
和of
,然後你提供各種表情取決於什麼值例如被輸出之間的值
case a of
True -> something1
False -> something2
所以,給在拉姆達會給你:
\a b -> case a of
value1 -> something1
value2 -> something2
爲了完整起見,我會提到,有一個LambdaCase語言的擴展,使您可以簡化:
\a -> case a of
value1 -> something1
value2 -> something2
到
\case
value1 -> something1
value2 -> something2
但這不是必要的,我當然不會擔心它作爲初學者。
我希望這可以幫助,隨時要求澄清:)
你所說的「lambda表達式」是什麼意思? – melpomene
我們給出了這個例子:add x y = x + y,它是一個lambda表達式add = \ x - >(\ y - > x + y) –