J'ai une mission de PMG et l'une des questions est de mettre en œuvre une fonctionfonction SML pour retourner une liste d'éléments d'un arbre soulève une exception
findAll : (int -> bool) -> binary search tree -> int list
Je donne les résultats suivants jusqu'à présent:
datatype 'a tree = Empty | Node of (int * 'a tree * 'a tree)
exception answer of int list
fun findAll f Empty = raise answer []
| findAll f (Node(x, l, r)) =
if (f x) then raise answer(x)::(findAll f l)::(findAll f r)
else
(findAll f l)::(findAll f r)
Fondamentalement, findAll
prend dans une fonction booléenne et renvoie tous les nœuds qui satisfont cette fonction sous la forme d'une exception. Je sais pourquoi mon code ne fonctionne pas, car il y aura une réponse (raise response) à l'intérieur de l'original (raise answer) mais de toute façon ce n'est pas la compilation. Je me demandais ce que je devrais faire pour résoudre ce problème. Je ne peux pas appeler une fonction d'assistance qui récupère tous les éléments et appelle simplement l'exception, je devrais cependant utiliser l'exception de transport de valeur. Je devrais aussi être capable de retourner tous les éléments dans l'ordre.
Qu'est-ce qui ne fonctionne pas réellement? Comme dans, quelle est l'erreur exacte que vous obtenez? – Gian