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