我真的很高興,如果有人能給我一個提示,模式匹配應該如何在 haskell 中作業。我已經花了幾個小時觀看不同的教程,但我不明白。
我有以下實體的資料型別分配:
data Assignment = EmptyA | Assign String Integer Assignment
deriving Show
myAssn = Assign "x" 1 (Assign "x" 2 (Assign "y" 3 EmptyA))
現在我想撰寫一個函式,將數字回傳給給定的字串。例如應該 lookupA myAssn "y" 回傳 3:
lookupA :: Assignment -> String -> Integer
lookupA EmptyA _ = 0
lookupA assn s = ???
uj5u.com熱心網友回復:
您可能知道它Assignment是一種遞回資料結構,因為它可以保存自身的實體。要解決這個問題,您需要利用Assignment.
data Assignment = EmptyA | Assign String Integer Assignment
deriving Show
lookupA :: Assignment -> String -> Integer
lookupA EmptyA _ = 0
lookupA (Assign name number nAssign) lookingFor
| name == lookingFor = number
| otherwise = lookupA nAssign lookingFor
myAssn = Assign "x" 1 (Assign "y" 2 (Assign "z" 3 EmptyA))
這段代碼的作用如下:
lookupA (Assign name number nAssign) lookingFor
它解構第一個引數并僅匹配Assign資料建構式。using 守衛,它檢查 this 的名稱是否Assignment等于我們正在尋找的名稱。如果是,它回傳數字,否則,它在此賦值中的賦值上遞回呼叫自己。基本情況當然是EmptyA資料結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329026.html
上一篇:rvminstall2.6.2在ubuntu20.04中不起作用
下一篇:Haskell:在地圖上遍歷
