У меня есть функция восстановления дерева из 2 списков. Я возвращаю список во всех ветвях, но я получаю сообщение об ошибке, которое я не понимаю. Но я предполагаю, что это связано с типами возврата.Тип, подлежащий объединению, имеет тип
Ошибка заключается в следующем:
Can't unify ''a with ''a list (Type variable to be unified occurs in type) Found near recon
(::(preoH, preoT), ::(inoH, ...))
Exception- Fail "Static errors (pass2)" raised
Линия ошибка происходит в то заголовок определения функции fun recon (preoH::preoT, inoH::inoT) =
Что это означает, что ошибка именно и почему это происходит?
(* Reconstruts a binary tree from an inorder and a preorder list. *)
fun recon (preoH::preoT, inoH::inoT) =
(* Case 0: Leaf reached*)
if
preoT = [] andalso inoT = [] andalso preoH = inoH
then
[preoH]
else
let
(* split the list of nodes into nodes to the left and nodes to the
right of preoH; ST stands for subtree *)
val (inoLST, inoRST) = splitat (inoH::inoT, preoH)
val (preoLST, preoRST) = splitafter (preoT, last(inoLST))
in
(* Case 1: Unary branch encountered, make preoH the parent node of the
subtree and combine the left and right preorder and inorder lists*)
if
length(inoLST) <> length(preoLST)
then
[preoH, recon ([email protected], [email protected])]
(* Case 2: Binary branch encountered, proceed as normal *)
else
[recon (preoLST, inoLST), preoH, recon (preoRST, inoRST)]
end;
Если, случайно, вы заинтересованы в том, как определение типа работает в ML, я дал небольшой разговор об этом: https://www.youtube.com/watch?v=oPVTNxiMcSU я надеюсь, акцент терпим. –