0

次のように定義されたよりプリミティブな型で構成される相互再帰型を作成しました。

type Title = Title of string;;
type Value = Value of int;;

type Subcol = Collection list
and Collection = 
    | Col of Title * Value * Subcol
    ;;

subcol は空のリストである場合とそうでない場合がありますが、そうでない場合は、指定されたコレクションの値と、Subcol の再帰呼び出しとそれに含まれる値の定義の両方を合計したいと思います。これを行うために、次の関数を作成しました。

let rec colList = function
    | []          -> 0
    | _::v::s     -> (colList s) + sumVal v
and sumVal = function
    | Value v        -> v
and col = function
    | Col(_,v,[]) -> (sumVal v)
    | Col(_,v,s)  -> (sumVal v) + (colList s)
    ;;

私は関数呼び出し colList を期待しています

Col(_,i,s)  -> (sumVal i) + (colList s)

Subcol 型から int を生成するには、次のエラーが発生します。

エラー FS0001: タイプが一致しません。値リストが必要ですが、サブコルが指定されています タイプ「値」がタイプ「コレクション」と一致しません

colList が値リストではなく、サブコルを受け入れるようにします。

どんな助けでも大歓迎です、ありがとう。

4

0 に答える 0