[英]Definition of (&&) using Lambda Expressions
我收到以下問題:
1。
True && True = True
_ && _ = False
我將此寫為條件表達式:
(&&) a b = if a then
if b then True else False
else False
2。
True && b = b
False && _ = False
我將此寫為條件表達式:
(&&) a b = if a then b else False
我正在嘗試在lambda表達式中編寫為(&&)給出的這兩個定義,但我不確定要從哪里開始或如何做。
我不會直接寫答案,因為這似乎是某種作業/家庭作業。 因此,我只解釋一下lambda如何工作。
讓我們看一下基本的lambda並將其分解: \\ab -> a
在箭頭的左側(在這種情況下為ab),我們有參數。 這些就是傳遞給lambda的東西。
在箭頭的右側,我們有輸出(在本例中為a)。 因此,此lambda要做的是獲取兩個值並為您提供第一個值。
輸出可以是任何表達式,例如,如果我們將a和b限制為數字,則可以使myLambda = \\ab -> a + b
因此myLambda 1 2
將輸出3。
因此,要將您的定義轉換為lambda,只需使用if then else
語句, if then else
將其作為lambda中箭頭后面的表達式即可。
您還可以使用在給定的初始定義中使用的模式匹配,並使用case of
語句將其轉換為lambda。 這需要在case
和of
之間取一個值,然后根據該值提供不同的表達式來輸出,例如
case a of
True -> something1
False -> something2
因此,將其放在lambda中將為您提供:
\a b -> case a of
value1 -> something1
value2 -> something2
為了完整起見,我將提到一個LambdaCase語言擴展,它可以簡化:
\a -> case a of
value1 -> something1
value2 -> something2
至
\case
value1 -> something1
value2 -> something2
但這不是必需的,而且作為初學者,我當然不會擔心。
希望對您有所幫助,請隨時澄清:)
通常,如果
foo bar baz = quux
然后這兩個定義
foo = \bar baz -> quux -- OR
foo = \bar -> \baz -> quux
本質上與原始語言相同(最多可以通過提供顯式的類型簽名來解決某些語言缺陷)。 您可以選擇更喜歡的一個。 所以,
(&&) a b = if a then b else False
也可以寫成:
(&&) = \a b -> if a then b else False
您可以按照相同的模式來解決另一個問題嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.