[英]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首先用參數3
和5
調用。 y
為5(即不為0),執行then
分支,使用參數4
和4
調用f。 由於y
仍然不等於0,我們再次進入then
分支並使用參數5
和3
調用f。 這一直持續到我們最終調用f為x = 8
且y = 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.