Haskell 如何组合最大值为2的额外列视图
更新2:是否有可能为3^2、4^2、5^2、。。。10^2,到目前为止,我必须硬编码这个,即使再加上这个, 我觉得不是一个完整的组合Haskell 如何组合最大值为2的额外列视图,haskell,Haskell,更新2:是否有可能为3^2、4^2、5^2、。。。10^2,到目前为止,我必须硬编码这个,即使再加上这个, 我觉得不是一个完整的组合 comb0 :: [(Int, Int, Int)] comb0 = do a <- [0,1,2] b <- [0,1,2] return (a, b, 2 - max a b) comb :: [(Int, Int, Int, Int, Int, Int, Int, Int, Int)] comb = do a1 <
comb0 :: [(Int, Int, Int)]
comb0 = do
a <- [0,1,2]
b <- [0,1,2]
return (a, b, 2 - max a b)
comb :: [(Int, Int, Int, Int, Int, Int, Int, Int, Int)]
comb = do
a1 <- [0]
a2 <- [0,1]
a3 <- [0]
a4 <- [0,1]
a5 <- [0,1]
a6 <- [0]
a7 <- [0]
a8 <- [0]
a9 <- [0]
return (a1,a2,a3,a4,a5,a6,a7,a8,a9)
组合变成[0;0],[0;1],[0;2],[1;0],[1;1],[1;2]
将[1;0]添加回[1+0;0+0]、[1+0;0+1]、[1+0;0+2]、[1+1;0+1]。。。等,然后胶水,然后回到桌子上
如何在haskell中以简单的方式编写
原始问题:
如果仅返回(a,b),则逻辑表的输入是正确的
这个问题是使用值2,你可以说它是3值,
当我计算5值时,我的计算机c计算速度很慢#
等待了很长时间,仍然没有完成,我期待增加价值
希望haskell能在这方面做得更快
希望将输出列添加到此,
我使用((a,b),max(a,b))作为起点,然后将一个添加到第三个
列,直到到达2,递归地运行并保存每个组合,在F#编写的列表中,输出12个组合输出,但我觉得有一些
缺少,而不是完整的组合,希望使用haskell做同样的事情来查看此文件的完整组合并保存到文本文件中,并且计算它有多少个组合
如果除第一行0外,0也保留输出0
comb :: [(Int, Int, Int)]
comb = do
b <- [0,1,2]
a <- [0,1,2]
return (a,b, max a b)
comb2 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
comb2 x = do
c <- [0,1,2]
return (fst x, fst snd x, c + snd snd x)
使用
max a b
,而不是max(a,b)
。前者传递两个参数,后者只传递一个参数——一对(a,b)
使用max a b
,而不是max(a,b)
。前者传递两个参数,后者只传递一个参数——一对(a,b)
使用max a b
,而不是max(a,b)
。前者传递两个参数,后者只传递一个参数——一对(a,b)
使用max a b
,而不是max(a,b)
。前者传递两个参数,后者只传递一个参数——一对(a,b)
正如您要求的那样-您可以使用以下方法编译comb2
:
comb2 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
comb2 xs = do
(a,b,c) <- xs
d <- [0,1,2]
return (a, b, c+d)
正如您所看到的,您可以不使用
do
块,而是按照您的要求使用seq
表达式——您可以通过以下方式获得comb2
编译:
comb2 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
comb2 xs = do
(a,b,c) <- xs
d <- [0,1,2]
return (a, b, c+d)
正如您所看到的,您可以不使用
do
块,而是按照您的要求使用seq
表达式——您可以通过以下方式获得comb2
编译:
comb2 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
comb2 xs = do
(a,b,c) <- xs
d <- [0,1,2]
return (a, b, c+d)
正如您所看到的,您可以不使用
do
块,而是按照您的要求使用seq
表达式——您可以通过以下方式获得comb2
编译:
comb2 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
comb2 xs = do
(a,b,c) <- xs
d <- [0,1,2]
return (a, b, c+d)
如您所见,您可以使用
seq
表达式来代替do
块在列视图中组合如何在列视图中组合如何在列视图中组合如何如何在列视图中组合如何在列视图中组合如何
comb2 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
comb2 xs = do
(a,b,c) <- xs
d <- [0,1,2]
return (a, b, c+d)
> let comb2 xs = seq {
- for (a,b,c) in xs do
- for d in 0..2 do
- yield (a,b,c+d) };;
val comb2 : xs:seq<'a * 'b * int> -> seq<'a * 'b * int>