簡體   English   中英

使用Lambda表達式定義(&&)

[英]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。 這需要在caseof之間取一個值,然后根據該值提供不同的表達式來輸出,例如

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM