1

変更量を指定して変更のすべての組み合わせを見つけるいくつかの OCaml コードがあります。ほとんどのコードが機能していますが、この再帰関数が実際に可能な変更の組み合わせを返す方法を理解できません。

let change_combos presidents = 
  let rec change amount coinlist =  match amount with 
    |0 -> [[]] (*exits when nothing*)
    |_ when (amount < 0) -> [] (*exits when less than 0*)
    |_ -> match coinlist with
    |[] -> [] (*Returns empty list, exits program*)

(*h::f -> something, using [25;10;5;1] aka all change combinations...*)
(*using recursion, going through all combinations and joining lists returned together*)

let print_the_coin_matrix_for_all_our_joy enter_the_matrix =
print_endline (join "\n" (List.map array_to_string enter_the_matrix));;

助けてくれてありがとう、何かを明確にする必要がある場合はお知らせください:)

4

1 に答える 1

1

あなたが探しているものは少し混乱しています。リストのすべての組み合わせのリストを生成したいと思いますか? 再帰と個々の要素を生成する方法について考える必要があります。入力タイプから始めて、問題空間を減らすことによって連続する要素をどのように生成するかを考えてみましょう。

let rec generate lst = match lst with
  | []   -> []
  | h::t -> [h] :: (List.map (fun x -> h::x) (generate t)) @ (generate t)

リストが[]存在する場合、組み合わせはありません。要素がある場合、その要素を含まないすべての組み合わせを生成し、その仮定に基づいて構築します。コンポーネントはこの時点で配置されます。の組み合わせのリストを と の組み合わせで連結し、 のそれぞれtとシングルトンに連結します。th consh

于 2013-10-02T17:30:53.917 に答える