Мне посоветовали задать это как отдельный вопрос, так что я сделаю.
У меня есть дерево людей, как в генеалогии.Он начинается с человека и разветвляется на родителей, бабушек и дедушек и т. Д. Я хочу иметь возможность вставить человека в место на дереве (в основном заменяя того, кто там есть).
Эти типы данных важны:
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 * список родителей * person -> tree, чтобы вызывающий insert (t, pos, p) вставил человека p в pos-позицию вдерево я - при условии, что позиция существует в дереве.Если этого не произойдет, он должен вернуть t.
Так что мне нужно иметь возможность взять человека в моем дереве (скажем, мама) и заменить его Люси (мама и Люси оба предварительно объявленные значения, используятип данных).
Пока что у меня есть это:
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, и заменить корень на p - не совсем то, что яхотите, чтобы это делалось: S Кроме того, сопоставление с образцом не завершено.
Есть какие-нибудь идеи, чтобы заставить меня переехать сюда?