![](/img/trans.png)
[英]How can I fix my simple Haskell CLI program to show the contents of a file?
[英]How can I fix this program dealing with pairs of Booleans in Haskell?
對於初學者Haskell課程中的一項家庭作業,我正在嘗試編寫一個程序,該程序將獲取一對布爾值,並返回來自一對布爾值的布爾值列表,它們之間有一個“ &&”。 例如...
andandbool [(True,True),(True,False),(False,True),(False,False)]
會返回:
[True, False, False, False]
但是,我一直遇到麻煩。 我的代碼如下所示。
andandbool :: [(Bool,Bool)] -> [Bool]
andandbool [a] = [fst x && snd x | x <- [a]]
當我僅提供一對對的列表時,它工作正常,但是當我輸入多個對的列表時,報告“功能andandool中的非窮盡模式”。 我缺少某種列表理解嗎? 朝正確方向的任何指針將不勝感激。
現在我在電腦上,我將把我的評論變成答案。
當您命名函數[a]
的參數時,Haskell會將其解釋為與一個元素列表匹配的函數模式。 這就是為什么您的函數僅適用於一個元素列表的原因。 要解決此問題,只需將function參數重命名為名稱中沒有方括號的內容:
andandbool :: [(Bool,Bool)] -> [Bool]
andandbool as = [fst x && snd x | x <- as]
as
參數現在將匹配任何列表。
編輯:就像@Ankur提到的那樣,您可以將其簡化為:
andandbool as = [x && y | (x, y) <- as]
如果您真的想打代碼高爾夫,可以將其簡化為:
andandbool = map (uncurry (&&))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.