有人建议我将此作为一个单独的问题提出,这样我就可以了。
我有一棵人的树,就像家谱一样。它从一个人开始,然后分支为父母、祖父母等。我希望能够将一个人插入树上的某个位置(基本上替换那里的任何人)。
这些数据类型很重要:
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)就会将person 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 此外,模式匹配还没有完成。
有什么想法可以让我搬到这里吗?