リストを与えられた入力を持つ要素の連続した出現が1になるリストを返す単純な関数を構築しました。値の制限と型推論
let rec reduce l =
match l with
| [] -> []
| [x] -> [x]
| x::(y::_ as xs) -> if x = y then
reduce xs
else
x::(reduce xs)
# reduce [1;1;2;2;2;3;3;4;3;3;3];;
- : int list = [1;2;3;4;3].
# reduce [’a’;’a’;’a’;’b’];;
- : char list = [’a’; ’b’].
# reduce [];; // The case
- : ’a list = []
空のリストを除き、すべてが期待通りに動作します。[]
入力。苦情申告者はエラーFS0030:値の制限と述べています。私はdocumentationを通して現象の理解を深めようとしましたが、ポイントを正しく得る技術はまだ持っていないような気がします。汎用関数で[]
の型を指定する必要があるのはなぜですか?結果は[]
は型推論なしで単純に報告できませんでしたか?そして、最後に、そのような事件を封じ込めるために、どのように機能を構造化すべきか?
問題は、[[] 'は' 'リスト 'ですが、コンパイラは' 'a''が何であるかを知る必要があります –
あなたの貢献のために@JohnPalmerありがとうございます。 – Worice