Dan*_*nny 1 haskell list-comprehension cartesian-product
试图将两种数据类型的笛卡尔积产品放入一个列表中:
data X = hello | goodbye | hi
deriving (ord, enum, eq, show)
data Y = hello | goodbye | hi
deriving (ord, enum, eq, show)
compList :: [a]
compList = [(x, y) | x <- X, y <- Y]
Run Code Online (Sandbox Code Playgroud)
显然x < - X等目前不起作用,我只是想知道你们怎么会这样做?
干杯.
除了套管问题,你不能在这里有两个同名的数据构造函数,我认为最简单的方法是包含Bounded然后你几乎得到它:
data X = Hello | Goodbye | Hi
deriving (Enum, Bounded, Show)
data Y = Hello2 | Goodbye2 | Hi2
deriving (Enum, Bounded, Show)
compList :: [(X,Y)]
compList = [(x, y) | x <- [minBound..maxBound], y <- [minBound..maxBound]]
Run Code Online (Sandbox Code Playgroud)
使用Enum你可以使用[a .. b]语法(你可能已经知道)并Bounded给你minBound和maxBound
?> compList
[(Hello,Hello2),(Hello,Goodbye2),(Hello,Hi2),(Goodbye,Hello2),(Goodbye,Goodbye2),(Goodbye,Hi2),(Hi,Hello2),(Hi,Goodbye2),(Hi,Hi2)]
Run Code Online (Sandbox Code Playgroud)
当然,如果你不想使用,Bounded你可以自己给出限制:
data X = Hello | Goodbye | Hi
deriving (Enum, Show)
data Y = Hello2 | Goodbye2 | Hi2
deriving (Enum, Show)
compList :: [(X,Y)]
compList = [(x, y) | x <- [Hello .. Hi], y <- [Hello2 .. Hi2]]
Run Code Online (Sandbox Code Playgroud)
当然这里几乎和说[Hello,Goodbye,Hi];)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |