這個自創函式的目的是獲取一個串列,并輸出2個串列,它們將交替插入到串列中。SO [4,5,1,6,7,8] 將被處理成 2 個串列,例如 ([4,1,7],[5,6,8])
deal :: [a] -> ([a],[a])
deal [] = ([],[])
deal [x] = ([x],[])
deal (x:xs) = let (ys,zs) = deal xs
in (x:zs, ys)
這是功能。我不明白 let (ys,zs) = deal xs 發生了什么,我知道它基本上為 2 個串列創建了一個占位符,但有人可以引導我完成正在發生的遞回。
uj5u.com熱心網友回復:
根據定義,
deal [8] = ([8], [])
現在:
deal [7,8]
= deal (7:[8])
= let (ys,zs) = deal [8]
in (7:zs, ys)
-- from the recursion we discover ys=[8], zs=[]
= (7:[], [8])
= ([7], [8])
再次:
deal [6,7,8]
= deal (6:[7,8])
= let (ys,zs) = deal [7,8]
in (6:zs, ys)
-- from the recursion we discover ys=[7], zs=[8]
= (6:[8], [7])
= ([6,8], [7])
等等。每次遞回時,我們交換前一個結果對并將一個專案添加到第一個組件。由于交換,就像將一個元素添加到第一個組件,然后添加到第二個組件,然后再次添加到第一個組件,依此類推,交替進行。粗略地說,這會將串列分成兩半。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/426867.html
上一篇:如何撰寫一個python函式以在整數中有偶數個0時回傳True,否則使用遞回回傳False?
下一篇:遞回解決方案中的錯誤退出條件
