I am in computer science and I have a duty in Clisp.
This is an alphabetic sort, I block on a function.
The "ajoute" function, which adds a word to a tree, presents three cases:
The tree is empty: we create a tree with just the word as root: ( "word");
The word is greater than the root: we recurse with the right branch as root;
We recurse with the left branch as root.
Here are the correct tests :
(setq arbre (ajoute "k" nil)) => ("k")
(setq arbre (ajoute "a" arbre)) => ("k" ("a"))
(setq arbre (ajoute "m" arbre)) => ("k" ("a") ("m"))
(setq arbre (ajoute "n" arbre)) => ("k" ("a") ("m" nil ("n")))
(setq arbre (ajoute "b" arbre)) => ("k" ("a" nil ("b")) ("m" nil ("n")))
And here are my tests
(setq arbre (ajoute "k" nil)) => ("k")
(setq arbre (ajoute "a" arbre)) => ("k" ("a"))
(setq arbre (ajoute "m" arbre)) => ("k" ("a") ("m"))
(setq arbre (ajoute "n" arbre)) => ("k" ("a") ("m") ("m" ("n")))
Here is my function :
Code: Select all
(defun ajoute (mot arbre)
(print arbre)
(cond
((atom arbre) (list mot . nil)) ; NOT LIST => ADDS AT TREE
((listp (car arbre)) (ajoute mot (car arbre)))
((equal (french-string mot (car arbre)) t) (append arbre (list (ajoute mot (cdr (cdr arbre)))))) ; RIGT TREE
((append arbre (list (ajoute mot (car (cdr arbre)))))) ) ) ; LEFT TREE
exemple :
[182]> (french-string "a" "b")
nil
[183]> (french-string "b" "a")
t
I think the problem with my function "adds" comes from my use of list and append, but I can not solve the problem. Do you have any leads to help me?
Thank you very much for your help and your time.