我需要幫助來使用模式匹配修復這個 Haskell 函式。如果公式串列中的每個公式都為真,它應該只回傳真。這是我到目前為止所擁有的:
eval_list :: [Formula] -> Bool
eval_list (f:fx) = (eval_list f) && (eval_list fx)
這里是公式的定義方式:
data Formula = And Formula Formula
| Not Formula
| Con Bool
deriving Show
uj5u.com熱心網友回復:
您忘記為空串列實施案例。由于您每次都使用比前一次呼叫短一項的串列項進行遞回,因此最終您將使用空串列進行遞回呼叫。
另一個問題是您呼叫eval_list f, 但它f是串列的第一項,因此是一個Formula物件,而不是Formulas的串列。您可能應該使用 aeval_formula來評估公式。
因此,您可以通過以下方式實作:
eval_list :: [Formula] -> Bool
eval_list [] = True
eval_list (f:fx) = eval_formula f && eval_list fx
您必須eval_formula自己實施。
您不需要使用顯式遞回。例如,您可以使用all :: Foldable f => (a -> Bool) -> f a -> Bool:
eval_list :: Foldable f => f Formula -> Bool
eval_list = all eval_formula
為了評估單個Formula,您可以使用遞回,因此該函式將如下所示:
eval_formula :: Formula -> Bool
eval_formula (And f1 f2) = …
eval_formula (Not f) = …
eval_formula (Con b) = …
在那里我將執行…部分作為練習。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316846.html
上一篇:Haskell超型別和子型別
