我希望从滚动两个骰子中生成一个点列表。如果两个骰子显示相同的值,则输出点将变为(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)]
答案 0 :(得分:6)
list元素应该是相同的类型,你的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]]