最初に: 私の英語はあまり上手ではありません。申し訳ありません :(
だから、これは私が解決しなければならない問題です:
-- Based on a simple math game: given a list of numbers use the four basic
-- operations (+, -, /, *) between them to find (or be as close as possible to)
-- another given number
私の問題の例がありますが、解決するにはもっと具体的にする必要があり、「haskell モード」では考えられません。私は C++ プレーヤーです :(
だから、私はこれを行っています:
-- 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, 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)] ) ]
最初にいくつかの数字を取り (ペア関数を使用)、
[number,number,'operation',result]
「操作」ができることの2 番目のショー。
私はこのようなものを持っています:
solve(n,ns) = [ e | ns' <- pairs ns
, e <- operations ns']
しかし、私はそれを機能させることはできません。
編集:
私は本当にあなたの答えに感謝します、どうもありがとう、しかし私が求めている機能を実行できない場合、私はHaskellで本当に新しいので、あなたの開発を理解できません:(
私が言うように、数値のリストと、メインの投稿で書いた 2 つの操作 (操作とペア) を使用して、これを行う別の関数を作成する関数が必要です。
例)
solve ( 100 , [1,4,5] , [] )
[ ( 100 , [5,5] , [(1,4,'+',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)] ) ]
迅速な回答をありがとうございますが、回答をより具体的にする必要があります。