まあ、私は Haskell の要点 (ほとんど) が、単純な関数からより複雑な関数を構築するために再帰性を使用する利点であることを理解しています。次に、特定のタプルを使用して、2 つの数値が実行できるすべての可能な操作 (*、+、-、/) を出力する operations という別の関数を用意します。
-- 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]
int の文字列と目的の数値を指定する関数を実装しようとしています (最終的な目的は、int の文字列でその数値を取得することです)。タプルとその結果の可能なすべての組み合わせを出力します。
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)] )、私が欲しいものです
なるほど、少し違うように見えるので、自分のやり方を試してみたいと思います.2回目以降は混乱します.Haskellはまだ少しひどいです. だから、これは私の関数が行うことです: etc] 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)] ),