-1

タイプの OCaml リストがあり(string*int) listます。リストをたどってint値を確認する必要があります。リスト内のすべての要素に対してプロパティint>=0が保持されている場合、リストは「正常」であり、それ以外の場合、いずれかのインスタンスで失敗した場合は「失敗」を返す必要があります。このために、私は次の試みをしました

let rec check tlist = match tlist with
[] -> print_string "finished"
|(s,i)::tail -> if i < 0 then print_string "fail" else check tail 

これをインタープリターから実行すると、パターン マッチングが完全ではないという警告が表示されます。また、次の入力タイプで実行すると

let z = [("ask",1);("tell",2);("three",3);("goal",-4)] ;;

期待どおりに失敗を返しますが、

let z = [("ask",1);("tell",2);("three",3);("goal",4)] ;; ,

例外を返します:

Match_failure ("//toplevel//", 7, -22).

これについてどうすればいいですか?

編集:また、問題には別の部分があります。リスト内で文字列sが繰り返されないようにする必要があります。それについてどうやって行くのですか?

4

1 に答える 1

2

あなたが投稿したコードは問題なく、警告を生成せず、あなたが言う入力に対して機能します。

それを改善したい場合は、アルゴリズムロジックと入力/出力を分離して、より柔軟なものにする必要があります。関数が の代わりにブール値を返すようにしunitます。

于 2013-03-09T12:29:19.433 に答える