1

私はchar listOCAMLを持っています。( (char * bool) list) listとのすべての組み合わせのcharを作成したいと思いtrueますfalse

私がしなければならないことは、のようなものだと思いますがList.fold_left、それをやってのける方法がよくわかりません。

これは私が試した概要です(OCAML構文ですが、実行可能ではありません):

let rec var_perm var_list options = 
    match var_list with
        | [] -> options
        | x :: v' ->
            ((x, true) :: (var_perm_intern v')) :: ((x, false) :: (var_perm_intern v'))
;;

let all_options = var_perm ['a';'b'] [];;

戻るべき

[
    [('a',true);('b',true)];
    [('a',true);('b',false)];
    [('a',false);('b',true)];
    [('a',false);('b'false)];
]

編集:別の例:

let all_options = var_perm ['u';'w';'y'] [];;

戻る必要があります(順序は重要ではありません)

[
    [('u',false);('w',false);('y',false)];
    [('u',false);('w',false);('y',true )];
    [('u',false);('w',true );('y',false)];
    [('u',false);('w',true );('y',true )];
    [('u',true );('w',false);('y',false)];
    [('u',true );('w',false);('y',true )];
    [('u',true );('w',true );('y',false)];
    [('u',true );('w',true );('y',true )];
]
4

1 に答える 1

2

あなたは正しい解決策に近づいています。具体的には:

  • _intern再帰呼び出しでサフィックスを削除する必要があります
  • "options" パラメータは役に立たない (1 つのパラメータのみを渡して再帰呼び出しを行う方法を見てください) v'[]
  • これらは連結している2つのリストであり、リストに追加された1つの要素ではないため、「の結果v'true、ヘッド変数の結果」と「の結果と、ヘッド変数v'の結果」の連結をfalse記述する必要がありfoo @ barます。foo :: bar
于 2013-02-06T23:36:32.887 に答える