【发布时间】:2013-04-29 17:05:42
【问题描述】:
嗯,我确实明白,haskell 的全部意义(主要)是使用递归从更简单的函数中构建更复杂函数的优势,我有一个名为 pairs 的函数,它从一个整数字符串返回所有可能的元组组合,然后我有另一个称为操作的函数,它使用给定的元组打印出两个数字可以执行的所有可能操作(*、+、-、/),现在是我无法理解的部分:
-- Find all possible 2-combinations of the elements of xs.
pairs :: [Int] -> [(Int, Int)]
pairs xs = [(x, y) | (x:ys) <- tails xs, y <- ys]
operations :: (Int, Int) -> [(Int, Int, Char, Int)]
operations (x, y) =
[ (x, y, '+', x + y) ] ++
[ (x, y, '*', x * y) ] ++
[ (x, y, '-', x - y) | x > y, (x/=4 && y/=2) ] ++
[ (x, y, '/', x `div` y) | x >= y, x `mod` y == 0]
我正在尝试实现一个给定整数字符串和目标数字的函数(最终目标是使用整数字符串获得该数字)我打印出所有可能的元组组合及其结果,例如)
solve ( 100 , [1,4,5] , [] )
[ ( 100 , [5,5] , [(1,4,'+',5)] ),take first tuple 1,4 add and subs into "new tuple"5,5
( 100 , [3,5] , [(4,1,'-',3)] ),
( 100 , [6,4] , [(1,5,'+',6)] ),
( 100 , [4,4] , [(5,1,'-',4)] ),
( 100 , [9,1] , [(4,5,'+',9)] ),
( 100 , [1,1] , [(5,4,'-',1)] ),
( 100 , [20,1] , [(4,5,'*',20)] ) ]
我对如何解决这个问题感到困惑,因为我知道我已经有一个函数可以在一个元组上打印所有可能的操作,一个生成所有元组的函数但我看不到如何组合它们,任何帮助都是感谢,谢谢。
我看到了你的解决方案并且有道理,但我从头开始已经太晚了,
我已经这样做了:
solve(n,ns) = [ e | ns' <- pairs ns
, e <- operations ns']
( 100 , [3,5] , [(4,1,'-',3)] ),是我想要的
我明白了,我想尝试我的工作方式,因为它似乎有点不同,在第二次之后我感到困惑,我在 Haskell 上仍然有点糟糕。 所以这就是我的功能所做的: 对:当给定一个字符串时,返回所有可能的元组:对 [1,2,3,4,5,6] 将返回 [(1,2),(1,3)...等] operations 接受一个元组并返回该元组所有可能的操作(必须是正整数结果,否则我们不想要它),最后
solve(n,ns) = [ e | ns' <- pairs ns
, e <- operations ns']
取 n 为目标数, ns 为 6 个 +int 的字符串,到目前为止返回一个字符串,其中包含打印的所有元组组合,例如:[(3,'+',4,7),(3,´* ´,4,12)...等] 但是我希望它在每个阶段都打印:
[n,(result of tuple operation,string number)(tuple operation)]
eg ( 100 , [5,5] , [(1,4,'+',5)] ),take first tuple 1,4 add and subs into "new tuple"5,5
( 100 , [3,5] , [(4,1,'-',3)] ),
( 100 , [6,4] , [(1,5,'+',6)] ),
【问题讨论】:
-
你能提供你已经拥有的函数的类型签名,以及你正在尝试制作的函数吗?这会让你的问题更清楚。
-
好的,我会编辑主帖
-
我对
solve函数的示例输出感到困惑。没有一个操作实际上产生目标数字 100。另外,每个结果元组的第二个元素是什么意思? -
是的,我还没有找到,我只是找到了所有可能的操作并以这种方式打印出来,所以在 ( 100 , [3,5] , [(4,1,'- ',3)] ),作为结果的 3 被存储回元组 [3,5] 因为这是一个新的元组,我可以再次递归地使用操作(这是我的疯狂猜测),我是否有意义?
-
所以,从一个初始的整数字符串可以产生所有的元组,从这些元组上进行的操作每个元组产生一组新的数字,这些数字又可以用来创建一个新的元组。也许我应该先说这个;但目的是使用 add,subb, div, mult 在一串数字上得到一个目标数字,这是我必须做的,但我发现这更复杂和冗长glc.us.es/~jalonso/vestigium/…
标签: haskell