let rec funli li k = match li with
| [x] -> if k==1 then Some(x) else None
| x::ll -> funli ll k-1;;
utopは エラーを示しています。この式は、私はそれがint
を期待するために理由を見ていない「オプションを入力しているが、式はint型ocamlコードの問題点は何ですか?
に期待されました。このコードで何が起こっているのか理解してください。私はOCamlを初めて使っています。
let rec funli li k = match li with
| [x] -> if k==1 then Some(x) else None
| x::ll -> funli ll k-1;;
utopは エラーを示しています。この式は、私はそれがint
を期待するために理由を見ていない「オプションを入力しているが、式はint型ocamlコードの問題点は何ですか?
に期待されました。このコードで何が起こっているのか理解してください。私はOCamlを初めて使っています。
コードにはいくつか問題があります。まず、k-1
がパラメータであり、OCamlがその腕をどのように解釈しているのかを(funli ll k)-1
に戻そうとしていないことを明示したいとします。さらに、==
は、OCamlでの等価性のテストには使用されません。これはうまく動作します
let rec funli li k = match li with
| [x] -> if k=1 then Some(x) else None
| x::ll -> funli ll (k-1);;
funli ll k-1
は、(funli ll k)-1
として解析されます。だからあなたはオプションから1つを減算しようとしています、あなたが持っているエラーにつながる。
ほしいものはfunli ll (k-1)
です。
'x:ll'アームで' funli ll(k-1) 'と試してみてください。 –
また、 'k == 1'は無効な構文です。 'k = 1'が欲しい。 '=='はOCamlでの等価性のテストには使用されません。 –
無効な構文ではありません。しかし、整数にはお勧めできません。 – camlspotter