簡體   English   中英

如何在Haskell中修復處理成對的布爾值的程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM