suggestionのように、ツリーのようなネストされた構造体の再帰的なデータ型を使用するには、テストプログラムで再帰的なdatatyepを動作させようとしましたが、遭遇しました。再帰的データ型との統合
datatype 'a tree =
Leaf of { value : 'a }
| Node of { value : 'a, left: 'a tree, right: 'a tree }
fun recursivetreebuilder a n =
if n = 0
then
Leaf a
else
Node (a, recursivetreebuilder(a, n-1), recursivetreebuilder(a, n-1))
ので、関数が再帰的にn
まで減らさn
秒で自身を呼び出すことにより、深さn
のバイナリツリーを構築することになっている0
しかし、私は次のとおりです。
私のプログラムはこれですこのエラーを取得しています:再帰的なデータ型を使用して
Can't unify {left: 'a tree, right: 'a tree, value: 'a} with {value: 'b} *
(Int32.int/int -> 'c) * (Int32.int/int -> 'c) (Field 1 missing) Found near if
<(n, 0) then Leaf(a) else Node(a, recursivetreebuilder(...), ......)
は別の統一ISSを解決することを意図していましたネストされたリストを使用するときはue。多分私は問題が他の質問に説明が与えられている場所を見ることができるはずですが、私はまだありません。
「フィールド1」はコンパイラが参照するもので、同じデータ型の異なる「サブタイプ」を統一できるようにするために再帰的なデータ型を意図したときになぜ統合できないのですか?
編集
が示唆構造のいくつかを試してみましたが、まだエラーを取得します。
datatype 'a tree =
Leaf of 'a
| Node of 'a tree * 'a tree
fun recursivetreebuilder a n =
if n < 0
then
Leaf (a)
else
Node (recursivetreebuilder(a, n-1), recursivetreebuilder(a, n-1))
ため例えば私はここで二つの問題があります
val printList = fn : Int.int list -> unit
Error- in 'recon_bintree.sml', line 12.
Can't unify 'a with 'a * Int32.int/int (Type variable to be unified occurs in type) Found near if
<(n, 0) then Leaf(a) else
Node(recursivetreebuilder(a, ...), recursivetreebuilder(...))
Error- in 'recon_bintree.sml', line 12.
Can't unify 'a with 'a * Int32.int/int (Type variable to be unified occurs in type) Found near if
<(n, 0) then Leaf(a) else
Node(recursivetreebuilder(a, ...), recursivetreebuilder(...))
Error- in 'recon_bintree.sml', line 12.
Can't unify 'a tree with Int32.int/int -> 'b (Incompatible types) Found near if
<(n, 0) then Leaf(a) else
Node(recursivetreebuilder(a, ...), recursivetreebuilder(...))
Error- in 'recon_bintree.sml', line 12.
Can't unify 'a tree with Int32.int/int -> 'b (Incompatible types) Found near if
<(n, 0) then Leaf(a) else
Node(recursivetreebuilder(a, ...), recursivetreebuilder(...))
Exception- Fail "Static errors (pass2)" raised
わかりました...多かれ少なかれ。私はあなたの2番目の提案構造を実装しようとしましたが、私はまだ統一エラーを得る...私はそこに何が欠けていますか?私は質問を更新しました。 –
@lotolmencre:申し訳ありません。あなたには気づいていなかったもう一つの問題もありました。私は両方の問題を説明するために答えを更新しました。 (そして今度は私はそれをテストしました) – ruakh
ありがとう、それは今より明確になっています。 –