これを別の質問としてするように勧められたので、そうします。
系図のように、私は人々の木を持っています。人から始まり、両親、祖父母などに分岐します。人を木のスポットに挿入できるようにしたいです(基本的に、そこにいる人を置き換えます)。
これらのデータ型は重要です:
datatype year = Year of int | UnkYear | Irrelevant
datatype name = Name of string | UnkName
datatype sex = Man | Woman | UnkSex
datatype person = Person of name * sex * year * year
datatype parents = Dad | Mom
datatype tree = Unspec | Info of person * tree * tree
割り当ては次のとおりです: 関数 insert : tree *parents list * person -> tree を宣言し、insert (t, pos, p) を呼び出すと、人物 p がツリー i の位置 pos に挿入されます。ツリーに存在します。そうでない場合は、t を返す必要があります。
したがって、ツリー内の人 (お母さんとしましょう) を取り、彼女を Lucy に置き換えることができる必要があります (Mom と Lucy は両方ともデータ型 person を使用して事前に宣言された値です)。
これまでのところ、私はこれを持っています:
fun insert (Info(n,mf,ft) , Mom::xs , p) = Info(p, mf, insert(ft,xs,p))
| insert (Info(n,mf,ft) , Dad::xs , p) = Info(p, insert(mf,xs,p), ft)
| insert (Info(n,mf,ft) , [] , p) = Unspec
t の pos にいる人を削除し、ルートを p に置き換えるだけのようです - 私がやりたいことではありません :S また、パターン マッチングは終了していません。
ここに移動するためのアイデアはありますか?