Kan het om in lisp van een veriabele een bestandsnaam of commando te maken ?
vb.:
(defun c:testen ()
(setq test (getstring "\nGeef naam op <test1> <test2>:"))
(command "save" test)
(command "(test)" )
(defun test1 ()
(................)
)
(defun test2 ()
(................)
)
)
Alvast bedankt
Tom
Van een variabele kan men nooit een commando maken.
Lisp raakt dan in de war.
Van een variabele een bastandsnaam maken kan natuurlijk wel.
Moet Lisp nu de waarde weergeven van een variabele of het commando uitvoeren?
(setq test (getstring "\nGeef naam op <test1> <test2>:"))
Deze code is correct.
(command "save" test)
Hier is twijfel over wat er gesaved moet worden. Het bestand met de filenaam, opgeslagen in test, moet geopend zijn.
(command "(test)" )
Als je hiermee test1 of test2 wilt starten, werkt het niet.
Lisp probeert hier het commando TEST uit te voeren.
Je kunt variabelen en commando's gebruiken in een lisp.
Je moet het inderdaad wel goed programmeren, anders raakt het "in de war"
Citaat van: Joop
Code:
(command "save" test)
Hier is twijfel over wat er gesaved moet worden. Het bestand met de filenaam, opgeslagen in test, moet geopend zijn.
Code:
(command "(test)" )
Als je hiermee test1 of test2 wilt starten, werkt het niet.
Lisp probeert hier het commando TEST uit te voeren.
Citaat van: TomKan het om in lisp van een veriabele een bestandsnaam of commando te maken ?
Tom
Beste Joop,Volgens mij werkt
(command "(test)" ) nooit, ook al zou de routine (test)
bestaan.
Men krijgt volgens mij altijd de foutmelding:
'(test) LISP command is not available'.Als de routine (test) wel bestaat, mag men
(command (test) ) of
natuurlijk gewoon
(test) gebruiken.
Groetjes HofCAD
CSIBeste Tom,AutoLISP is een dialect van CommonLISP, en dit een speciaal ontwikkelde
taal voor ARTIFICIAL INTELLIGENCE of AI.
Dit concept spreekt mij heel erg aan, daar ik ook alleen door de 'trial-and-error method' slimmer probeer te worden; ik ben echter blond. :oops:
Voor dit doel is er in de programmeertaal LISP geen fundamenteel
onderscheid tussen programmatekst en invoer, waardoor een programma
door invoer dynamisch veranderd kan worden.
Bedoel je daarom zoiets als het onderstaande? 8) Ik ben in mijn vraagstelling en antwoord voorzichtig, want iemand schrijft steeds:
'Domme vragen bestaan niet.
Domme antwoorden wel.'; en ik ben echter nog steeds blond. :oops:
Hierbij wil ik je aanraden bij de vraagstelling van de naam in het programma VARFUN uit te
proberen, wat het programma doet bij een invoer van <Enter>, AAP, TOM, TEST1 en TEST2. In CommonLISP kan dit onderstaande veel netter en beter geprogrammeerd worden,
maar dat wordt echter niet door AutoCAD ondersteund.
Groetjes HofCAD
CSI(defun c:VARFUN()
(defun test1()
(princ "\nRoutine test1 is uitgevoerd")
)
(defun test2()
(princ "\nRoutine test2 is uitgevoerd")
)
;***************BEGIN PROGRAM*******************************
(setq CMDE (getvar "CMDECHO"))(setvar "CMDECHO" 0)
(textpage)
(setq name nil)
(initget)
(setq name (strcase (getstring "\nNaam van de funktie <BLOND>: ")))
(if (or (= name "")(= name nil))(setq name "BLOND"))
(setq teknaam (strcat name ".dwg"))
(if (/= (getvar "DWGNAME") teknaam)
(if (not (findfile teknaam))
(progn
(setvar "FILEDIA" 0);geen dialoogbox
(command "SAVEAS" "" teknaam)
(setvar "FILEDIA" 1);wel een dialoogbox
(print (strcat "Tekening " teknaam " bestaat nog niet, maar wordt nu gemaakt."))
)))
;;;;;De tekening wordt gesaved met de naam die in name zit
(if (and (/= name "TEST1") (/= name "TEST2"))
(progn
(if (= (car (atoms-family 1 (list name))) nil)
(print (strcat "Functie " name " bestaat nog niet, maar wordt nu gemaakt."))
(print (strcat "Functie " name " bestaat al reeds, maar wordt nu geherdefinieerd."))
)
(setq deffunc (strcat "(defun " name "(X)" "(sqrt X))"))
(eval (print (read deffunc)))
;;;;;Bijv Routine (BLOND X) bestaat nu.
(setq calfunc (strcat "(" name " " "16" ")"))
(setq y (eval (print (read calfunc))))
;;;;;Bijv Routine (BLOND X) wordt uitgevoerd
(princ (strcat "\n" calfunc " geeft:\n"))
(princ y)
;;Stel U heeft een <Enter> gegeven bij de 'naamvraag', dan moet
;;eens na uitvoering van het programma VARFUN op de commandoregel
;;ingeven: (BLOND 25)
;;Stel U heeft bijvoorbeeld gekozen voor de naam aap, dan moet
;;eens na uitvoering van het programma VARFUN op de commandoregel
;;ingeven:(AAP 25)
)
(progn
(if (= name "TEST1")(test1));bij de 'naamvraag' is test1 ingegeven
(if (= name "TEST2")(test2));bij de 'naamvraag' is test2 ingegeven
))
(setvar "CMDECHO" CMDE)
(princ)
)
PS Waarschijnlijk bedoelde je dit niet, want ik ben blond
en volgens Bart ook kaal :evil: .
Maar laat het me wel weten als het iets anders moet zijn, want dat is
goed voor mijn 'trial-and-error method' .Broncode op:
http://www.autocadforum.nl/autocadforum/viewtopic.php?p=2017#2017