2017-02-21 3 views
0

私はこの非常に単純な再帰関数を持っており、charのリストからツリーにブランチを追加しています。定義の代わりに再帰関数の値を渡す方法

type tree = Node of bool ref * (char * tree) list ref 

let rec create_branch lc = function 
    [] -> Node(ref true, ref[]) 
    | x :: l -> Node(ref false, ref [(x, (create_branch l))]) 

私はこれが本当だろう最終ノードまでchar型の遷移と「偽」のノードの束を持っているでしょう1つの分岐のみを含むツリーを作成するために期待されます。

しかし、私はエラーを取得しています:

エラー:この式は型を持つ(のchar *(char型のリスト - >木))リストの参照 をしかし、式がタイプ(のchar *木)リストrefの期待されました タイプchar list - > treeはタイプツリーと互換性がありません

私の再帰呼び出しは何らかの理由で実際の関数への参照として渡されているようです - > tree))を返します。これは単純にツリーになります。

私が間違っていることを知りたいですか?

答えて

3

キーワードfunctionは、ラムダ式を作成します。ラムダ式では、パターンマッチングの複数の句を使用できます。

作成した関数は、lcという2つのパラメータと、パターンマッチングされたパラメータをとります。

functionmatch lc withに置き換えるか、lcを削除して修正することができます。

これは Ocaml: This expression has type 'a list * 'a list -> bool but an expression was expected of type boolと同じ問題ですが、そのようなエラーを探すのは難しいかもしれません。

+0

それは働いた、または少なくとも私のタイプの問題を修正しました。実際のコード作業を行うにはまだ多少の作業が必要ですが、多くの手助けをしました。ありがとうございました。 OCamlはかなり奇妙です。 –

関連する問題