簡體   English   中英

在Haskell的If-Else中會發生什么?

[英]What happens in this If-Else in Haskell?

我在haskell中有這個if-else子句。

let f x y = if y/=0 then f (x+1) (y-1) else x in f 3 5

結果是8.我無法理解為什么。

有人可以逐步向我解釋嗎? 感謝幫助!

好的,讓我們首先使用縮進使函數定義更加清晰

let f x y =
     if y/=0
         then f (x+1) (y-1)
         else x
in f 3 5

所以f首先用參數35調用。 y為5(即不為0),執行then分支,使用參數44調用f。 由於y仍然不等於0,我們再次進入then分支並使用參數53調用f。 這一直持續到我們最終調用f為x = 8y = 0 然后我們進入條件的else分支,它只返回x ,即8。

這是表達式f 3 5可以減少的一種方式:

f 3 5 -- y /= 0, so we go into the then branch
=> f (3 + 1) (5 - 1)
=> f 4 4 -- then branch again
=> f (4 + 1) (4 - 1)
=> f 5 3
=> f (5 + 1) (3 - 1)
=> f 6 2
=> f (6 + 1) (2 - 1)
=> f 7 1
=> f (7 + 1) (1 - 1)
=> f 8 0 -- this time we go into the else branch
=> 8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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