Haskell给定值域变量的所有赋值

Haskell给定值域变量的所有赋值,haskell,functional-programming,Haskell,Functional Programming,对于赋值,我们必须创建一个Haskell函数,该函数给定一个(字符串,[Integer])(其中Integer列表表示字符串的值域)元组列表,给出字符串和整数的所有可能组合 例如,输入估值[(“FirstVar”,[1..3]),(“SecondVar”,[1,2])应产生: [ [("FirstVar", 1), ("SecondVar", 1)], [("FirstVar", 1), ("SecondVar", 2)], [("FirstVar", 2), ("SecondVar", 1)]

对于赋值,我们必须创建一个Haskell函数,该函数给定一个(字符串,[Integer])(其中Integer列表表示字符串的值域)元组列表,给出字符串和整数的所有可能组合

例如,输入估值[(“FirstVar”,[1..3]),(“SecondVar”,[1,2])应产生:

[ [("FirstVar", 1), ("SecondVar", 1)], [("FirstVar", 1), ("SecondVar", 2)], [("FirstVar", 2), ("SecondVar", 1)], [("FirstVar", 2), ("SecondVar", 2)], [("FirstVar", 3), ("SecondVar", 1)], [("FirstVar", 3), ("SecondVar", 2)] ]
这应该适用于n个列表。到目前为止,我只使它适用于两个列表,但我仍然在使用高阶函数时遇到问题,因此我不知道如何使它适用于n个列表

我是如何通过函数求值实现两个列表的:

valuations :: (String, [Integer]) -> (String, [Integer]) -> [[(String, Integer)]]
valuations (a, bs) (c, ds) = pairValuations (makeLists(a, bs)) (makeLists(c, ds))

pairValuations :: a -> a -> [a]
pairValuations xs ys = [ [x, y] | x <- xs, y <- ys]

makeLists :: (String, [Integer]) -> [(String, Integer)]
makeLists (a, bs) = [(a, b) | b <- bs]
赋值::(字符串,[Integer])->(字符串,[Integer])->[[(字符串,整数)]]
估价(a,bs)(c,ds)=对估价(makelist(a,bs))(makelist(c,ds))
对价::a->a->[a]

pairValuations xs ys=[[x,y]|x我的解决方案是使用
序列

valuations = sequence . map makeLists
包括@orjan Johansen的解决方案,您还可以:

valuations = mapM makeLists
或者,使用
数据。可遍历

valuations = traverse sequenceA

我的解决方案是使用
序列

valuations = sequence . map makeLists
包括@orjan Johansen的解决方案,您还可以:

valuations = mapM makeLists
或者,使用
数据。可遍历

valuations = traverse sequenceA

sequence.map f
=
mapM f
。我也无法抗拒令人兴奋的尝试:
导入数据。可遍历;估值=遍历序列a
序列。map f
=
mapM f
。我也无法抗拒令人兴奋的尝试:
导入数据。可遍历;估值=遍历序列a