好吧,我确实明白,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)... etc] 操作接受一个元组并返回该元组的所有可能操作(必须是正整数结果,否则我们不想要它),最后
solve(n,ns) = [ e | ns' <- pairs ns
, e <- operations ns']
取 n 为目标数, ns 为 6 个 +ints 的字符串,到目前为止返回一个字符串,其中包含打印的所有元组组合,例如:[(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)] ),