gpt4 book ai didi

tree - 删除和添加节点到树

转载 作者:行者123 更新时间:2023-12-05 00:13:24 27 4
gpt4 key购买 nike

我有一个任务,我不知道该怎么做。我有一棵人的树,上面写着他们的名字、出生和死亡年份。想想这里的家谱。我有一堆数据类型来处理年龄、名称、树本身等,然后我有一堆人和一棵树。

数据类型是:

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

首先,我需要能够从这个位置删除某人及其“下面”的所有内容 - 因此删除“妈妈”将删除妈妈和她的 parent ,祖 parent 等。如果被调用的位置没有人,该函数应该返回树.它应该是这样的:
remove : Tree * parents 列表 -> 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;

但这是不正确的。我该怎么办?

我还应该能够将一个人 p, 插入到位置 pos 的树 t 中 - 如果该位置不存在,它应该只返回树。
插入:树 * parent 列表 * 人 -> 树

我只是无法解决这个问题,我希望有人能够帮助我。我希望我在这方面已经足够清楚(我知道它很长)。

最佳答案

(重新发布显然我之前的答案没有在数据库崩溃中幸存下来)。

您正在使用列表的头部来决定是分支到母子树还是父子树。这是对的。然后将列表的尾部用作路径的其余部分。这也是正确的。但是,当列表为空时(即您已到达目的地),您可以这样做:

| remove (Info(n,mf,ft) , [])      = Info(n,mf,ft)

换句话说:没有。如果您将其更改为:
| remove (Info(n,mf,ft) , [])      = Unspec

它将按预期工作,用 Unspec 替换您的路径引导您到达的树的节点。

关于tree - 删除和添加节点到树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com