Aller au contenu

Messages recommandés

Posté(e)

Bonsoir,

 

Comme dit dans le titre, je cherche à lancer une fonction depuis une autre fonction AutoLISP. Je sais, c'est la base mais regarder le code ci-dessous et vous comprendrez la difficulté.

 

 

 (defun c:test ()
 (setq Fonction '()
       Fonction (cons "2" Fonction)
       Fonction (cons "1" Fonction))
 (setq Lancer (getstring "\nQuelle fonction voulez-vous tester ?"))
 (if (= Lancer "1")
   (command (strcat "(c:"(nth 0 Fonction) ")"))
   (command (strcat "(c:"(nth 1 Fonction) ")"))
 )
 (princ)
)

(defun c:1 ()
 (alert "Test, fonction 1 lancée")
)

(defun c:2 ()
 (alert "Test, fonction 2 lancée")
)

 

 

Voilà, comme vous l'avez sans doute compris, je cherche à lancer une fonction dont je ne connais pas à l'avance le nom (même si pour l'exemple je le connais puisque c'est 1 et 2). En fait, le programme complet lit le nom des fonctions disponible dans un fichier et les place dans une liste. Puis en fonction des valeurs calculées lance la fonction associée.

 

Merci de votre aide. Et si vous ne comprenez pas tout, je repasse plus tard pour donner plus d'infos.

 

Cordialement

 

Toine

Posté(e)

Ben écoute, la syntaxe suivante:

 

<? (defun c:test ()

 

m'a plutôt l'air d'être du PHP que du LISP...

 

Fonction (cons "2" Fonction)

 

Et là aussi, en LISP une fonction commence par une parenthèse en principe..

 

 

Posté(e)

Le plus simple est de passer par un initget puis un getkword dans cette appli

par exemple :

 

(defun c:test(/ selection)

 

(defun fonction_1()

(alert "Test, fonction 1 lancée")

)

 

(defun fonction_2()

(alert "Test, fonction 2 lancée")

)

 

(initget "1 2")

(setq selection (getkword "\nQuelle fonction voulez-vous tester ? "))

(if (= selection "1")

(fonction_1)

(if (= selection "2")

(fonction_2)

(alert "Pas de fonction")

)

)

(princ)

)

 

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonsoir,

 

Excuses moi Patrick, j'ai relu, en vitesse le message. il fallait comprendre

 

(defun c:test ()

(setq Fonction '()

Fonction (cons "2" Fonction)

Fonction (cons "1" Fonction))

(setq Lancer (getstring "\nQuelle fonction voulez-vous tester ?"))

(if (= Lancer "1")

(command (strcat "(c:"(nth 0 Fonction) ")"))

(command (strcat "(c:"(nth 1 Fonction) ")"))

)

(princ)

)

 

(defun c:1 ()

(alert "Test, fonction 1 lancée")

)

 

(defun c:2 ()

(alert "Test, fonction 2 lancée")

)

 

et les lignes

(setq Fonction '()

Fonction (cons "2" Fonction)

Fonction (cons "1" Fonction))

s'écrivent tout à fait en LISP, si on respecte les parenthèses.

 

En fait, je voudrais pouvoir charger une liste de fonctions depuis un fichier texte (que l'utilisateur pourra modifier comme il le veut) et lancer ensuite la fonction désirée à la demande de l'utilisateur. Or c'est cette phase que je ne sais pas faire. Comment appler une fonction dont le nom est contenu dans une variable ?

 

Voilà

 

Cordailement

 

Toine

Posté(e)

Regarde l'aide LISP sur la fonction (read), fonction très peu utilisée mais dans ton cas, elle pourrait être utile. Elle transformera le nom d'une fonction qui est un type de donnée STRING en symbole. Si cette fonction est définie, elle pourra être exécutée.

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité