簡體   English   中英

Haskell-如何在列表理解中使用if else

[英]Haskell - how to use if then else in list comprehension?

我希望通過擲兩個骰子來生成點數列表。 如果兩個骰子顯示相同的值,則輸出點將變為(i,i,i,i)

我的代碼就像

[(i,j)|i<-[1..6],j<-[1..6], if i==j
                            then (i,i,i,i)
                            else (i,j)]

當我將其輸入到GHCi時,無法對其進行編譯。

我期望的輸出是

[(1,1,1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,1),(2,2,2,2),(2,3),(2,4),(2,5),(2,6),(3,1),(3,2),(3,3,3,3),(3,4),(3,5),(3,6),(4,1),(4,2),(4,3),(4,4,4,4),(4,5),(4,6),(5,1),(5,2),(5,3),(5,4),(5,5,5,5),(5,6),(6,1),(6,2),(6,3),(6,4),(6,5),(6,6,6,6)]

列表元素應該是相同的類型,而不是您的4元組和2元組。 如果您切換到列表,則可以這樣寫

[if i==j then [i,i,i,i] else [i,j] | i<-[1..6], j<-[1..6]]

會產生

[[1,1,1,1],[1,2],[1,3],[1,4],[1,5],[1,6],
 [2,1],[2,2,2,2],[2,3],[2,4],[2,5],[2,6],
 [3,1],[3,2],[3,3,3,3],[3,4],[3,5],[3,6],
 [4,1],[4,2],[4,3],[4,4,4,4],[4,5],[4,6],
 [5,1],[5,2],[5,3],[5,4],[5,5,5,5],[5,6],
 [6,1],[6,2],[6,3],[6,4],[6,5],[6,6,6,6]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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