Coucou,
Ce que (gile) cherchait à te faire comprendre ici c'est que faire une validation à vide avec un (getkword), et c'est de même avec la plupart des fonctions (get-) en général, retourne nil ! Autrement dit cela te retourne une entrée vide. Il faut savoir que la manière dont on écrit le texte d'un (getkword) n'est que pure syntaxe, mais cela ne signifie aucunement que c'est programmé nativement pour fonctionner ainsi. C'est simplement ainsi que AutoCAD fait la séparation entre simple texte, options et valeurs par défaut donc pour ne pas perdre l'utilisateur on copie cette syntaxe.
Un simple exemple, sur ton
(initget "Oui Non")
(setq rep1 (getkword "\nContinuer ? [Oui/Non] <Oui>: "))
Écrire les options entre crochets et séparées par un slash est une simple écriture autocadienne vis-à-vis des options. Car en effet si tu écris juste cette ligne
(setq rep1 (getkword "\nContinuer ? [Oui/Non] <Oui>: "))
les options vont-elles apparaître comme des options ? Non et ce malgré le fait que la syntaxe soit celle d'AutoCAD, n'est-ce pas ? Donc pour que le programme comprenne que la syntaxe [Oui/Non] doit être un ensemble d'options composé de Oui et Non, il y a besoin de le signifier nous même par de la programmation via
(initget "Oui Non")
Et bien pour les valeurs par défaut c'est pareil, si on ne programme pas une valeur par défaut, alors le programme ne pourra pas interpréter correctement ta syntaxe pour faire fonctionner ton programme comme souhaité. Or pour cela, il ne faut pas passer par (initget) mais justement comprendre ce que signifie réellement l'action de faire une validation à vide. Car pour (getkword), soit on répond via les options (et cela retourne donc l'option choisie), soit on rentre une chaîne de caractères arbitraire (et cela retourne donc une chaîne de caractères), soit on répond juste entrée (et cela retourne nil). Autrement dit, dans tous les cas un (getkword) retourne une chaîne de caractères SAUF si on fait une validation à vide (équivalent à choisir la valeur par défaut). En comprenant alors cette subtilité, tu peux donc mieux comprendre la réponse de VDH-Bruno :
(initget "Oui Non")
(setq rep1 (cond ((getkword "\nContinuer ? [Oui/Non] <Oui>: ")) ("Oui")))
impliquant ainsi d'affecter à la variable 'rep1', soit n'importe quelle chaîne de caractères retournée par (getkword) soit la chaîne de caractères "Oui" dans le cas où le (getkword) retourne nil (correspondant à un utilisateur ayant souhaité choisir la valeur par défaut). A titre d'exemple, cela fonctionne également
(initget "Oui Non")
(setq rep1 (cond ((getkword "\nContinuer ? [Oui/Non] <?>: ")) ("?")))
ici la valeur par défaut "?" n'apparaît pas dans le (initget) et pourtant elle fonctionne et remplie parfaitement sont rôle de valeur par défaut.
Bisous,
Luna