Hallo Stephan,
schau dir mal diese Zeilen an:
(setq e1 "Hallo"
liste1 (list e1 "du")
liste2 '(e1 "du")
liste3 (mapcar 'eval liste2)
)
(terpri)
(princ liste1)
(terpri)
(princ liste2)
(terpri)
(princ liste3)
Das ' sagt eigentlich nur aus, dass der danach folgende Ausdruck nicht evaluiert werden soll. Das heißt, er wird vom Programm so genommen wie er dort steht.
Da im Lisp nun einmal alles Listen sind, welche von runden Klammern umgeben sind, wird eben aus '( ... ) eine Liste.
Man kann aber das ' auch für ganz andere Dinge nutzen:
Das Beispiel verdeutlicht, dass das ' nichts mit Listen zu tun hat.
(setq pm '+)
(terpri)
(princ((eval pm) 1 1))
(terpri)
(setq pm '-)
(princ((eval pm) 1 1))
Die Variable pm (steht für PlusMinus) enthält den nicht evaluierten Wert + oder -
Dieser wird dann zur Laufzeit mittels (eval ..) evaluiert, und die Rechnung heißt dann
(+ 1 1)
oder eben
(- 1 1)
Ich hoffe dir helfen die Bsp und umgangssprachlichen Zeilen um dieses wichtige Thema zu verstehen.
Bei Fragen ...
Grüße Holger
------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP