私は3行目のエラーを取得しています、私のリスト上の私の最初の二つの要素を追加するOCamlのマッチ誤差
をしようとしています、なぜですか?
let addfirsttwo lst =
match lst with
| List.hd lst + List.hd (List.tl lst)
;;
私は3行目のエラーを取得しています、私のリスト上の私の最初の二つの要素を追加するOCamlのマッチ誤差
をしようとしています、なぜですか?
let addfirsttwo lst =
match lst with
| List.hd lst + List.hd (List.tl lst)
;;
リストから情報を抽出するための2つの異なる方法を組み合わせています。 1つはList.hd
とList.tl
を使用し、もう1つはパターンマッチングです。
前者では、ほぼ完了です。あなたはそうのようなパターンマッチング を取り除く必要があります:
let addfirsttwo lst =
List.hd lst + List.hd (List.tl lst)
私はあなたの質問がList.hd
とList.tl
が禁止されているいくつかの宿題に関連していること、しかし、想定しています。そして、とにかく、パターンマッチングは知っておくと便利です。 コードの問題は、パターンマッチングを完了しなかったことです。パターンマッチ句は、次の形式をとります。
| <some pattern> -> <some expression>
パターンは通常、式で使用できる変数を割り当てます。 List.hd
を定義する1つの方法は、例えば、あなたの句は、実際のパターンと->
がありませんでした
let hd list = match list with
| head::tail -> head
です。 、少なくとも構文をあなたのコードを修正する別の方法は、そのように足りない部分を提供することであっただろう:_すべてで任意の値に一致すると、任意の変数を結合しないワイルドカードとして機能し
let addfirsttwo lst =
match lst with
| _ -> List.hd lst + List.hd (List.tl lst)
。しかし、それは仮定された宿題の制約を解決するものではない。
hd
のパターンがすべての値と一致しないことに注意してください。 List.hd
は空でないリストだけをサポートする必要があるため、少なくとも1の長さのリストと一致します。あなたの関数は少なくとも2の長さのリストをサポートする必要があります。そのため、あなたはそのようなリストに一致するパターンがよいでしょう。
エラーは何ですか?質問の本文やタイトルに含めるようにしてください。 (同じ問題に解決策を見出そうとしている人を考えてください) – user5226582