あなたのコードはかなり近いです。私を許してください、しかし、私はあなたがOCamlの初心者の何かであると仮定します。
fun f ele head -> ...
の式では、f
,ele
、およびhead
の3つのパラメータを持つ関数を定義しています。私はあなたがその機能の名前としてf
を意図したと思う。しかし、OCamlのlambdas(関数式)は名前を持っていません(例えば、JavaScriptのように)。
OCamlに標準機能fold
はありません。あなたが左の折り畳みで作業していると仮定しましょう、List.fold_left
折り返される関数には、2つのパラメータがあります。最初の関数は関数の前回の呼び出しによる累積結果で、2番目の関数はリストからの新しい要素です。
だからあなたの内部関数は、より次のようになります。
fun accum ele -> ....
折りたたまれた機能は、新しい蓄積結果を返します。だから、明らかに0または1を返すことは望ましくありません。あなたは新しいカウントを返したいと思います。
私はこれが学校の課題の一部であると思われるので、もっと言いたいとは思わない。私はこれが役立つことを願っています
(サイドコメントしたように、この質問は再帰ではありません。再帰はList.fold_left
によって自動的に処理されて、あなただけの機能と初期値を記入する必要があります。)