課題がありますが、どうしたらよいかわかりません。私には、名前、生年月日、死亡年の人の木があります。ここで系図を考えてください。年齢、名前、ツリー自体などを処理するためのデータ型がたくさんあり、次に人とツリーがたくさんあります。
データ型は次のとおりです。
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
まず、この位置とその「下」にあるすべてのものを削除できるようにする必要があります。したがって、「Mom」を削除すると、お母さんとその両親、祖父母などが削除されます。呼び出された位置に人がいない場合、関数はツリーを返す必要があります。これは次のようになっているはずです:remove:Tree*親リスト->Treeそして呼び出しはremove(t、pos)です
これは私が持っているものですが、それは完全には正しくありません。私は4行でそれを行うことができると言われました。
fun replace (Info(n,mf,ft) , Mom::[]) = Info(n,replace(mf,[]),Unspec)
| replace (Info(n,mf,ft) , Dad::[]) = Info(n,Unspec,replace(ft,[]))
| replace (Info(n,mf,ft) , []) = Info(n,mf,ft)
| replace (Info(n,mf,ft) , Mom::xs) = Info(n,replace(mf,[]),replace(ft,xs))
| replace (Info(n,mf,ft) , Dad::xs) = Info(n,replace(mf,xs),replace(ft,[]))
| replace (Unspec , x::xs) = Unspec
| replace (Unspec , []) = Unspec;
私が持っているアイデア:
fun replace (Info(n,mf,ft) , Mom::xs) = Info(n,mf,replace(ft,xs))
| replace (Info(n,mf,ft) , Dad::xs) = Info(n,replace(mf,xs),ft)
| replace (Info(n,mf,ft) , []) = Info(n,mf,ft)
| replace (Unspec , xs) = Unspec;
しかし、それは正しくありません。私は何をしますか?
また、位置posのツリーtに人pを挿入できるはずです。位置が存在しない場合は、ツリーを返すだけです。挿入:ツリー*親リスト*人->ツリー
私はこれに頭を悩ませることができず、誰かが私を助けてくれることを望んでいます。私はこれで十分に明確になっていることを願っています(私はそれが長いことを知っています)。