2016-09-25 20 views
1

Ocamlのリスト内の特定の要素の出現を数える方法は?リスト内の要素の出現をカウントする - OCaml

count 2 [1;2;2;2;2;3;4;5] # should return 4 

どのようにフォールドが働いているのかわかりません。私はやってみた:

count element list = fold (fun f ele head -> if ele = head then 1 else 0) 0 list 

しかし、これは私のテストのために0を返し続けますか?

答えて

1

あなたのコードはかなり近いです。私を許してください、しかし、私はあなたが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によって自動的に処理されて、あなただけの機能と初期値を記入する必要があります。)