Zitat:
Original erstellt von chris888:
Hab hierzu mal ne reine Verständnisfrage:
Warum schreibt Frank hier manchmal (cons ....) und manchmal '(....) theoretisch würde es doch auch nur mit der 2 Methode funktionieren. Oder gibt es da einen Unterschied bei der Eingabe???mfg chris
Du brauchst nur mal zu sehen, was das jeweils ergibt:
(setq hoehe 100)
(cons 1 hoehe)
und alternativ
'(1 hoehe)
Na, siehst Du den Unterschied?
'(1 2 3) ist dasselbe wie und nur eine verkürzte Schreibweise für (quote (1 2 3)). Das Quoten verhindert das, was Lisp normalerweise macht: Ausdrücke zu evaluieren. Du kannst (1 2 3) nicht direkt verwenden, weil Lisp Listen so zu evaluieren versucht, dass das erste Element ein gültiger Funktionsname ist, bzw genauer: selbst zu einer gültigen Funktion evaluiert, die dann auf den Rest der Liste angewendet wird. Bei (1 2 3) kommt demnach die Fehlermeldung, dass 1 kein gültiger Funktionsname ist.
Um Listen eingeben zu können, musst Du also verhindern, dass diese evaluiert werden, und das geht mit dem Quoten. Der Haken ist nun, dass so eine quotierte Liste überhaupt nicht evaluiert wird. Darin stehende Symbole wie Variablennamen werden also auch nicht evaluiert, sondern bleiben als Symbol in der Liste stehen. Du willst aber, dass in der Liste (1 hoehe) das Symbol hoehe als Variable zu 100 evaluiert wird, und dass dann die Liste (1 100) weiter verwendet wird. Also darfst Du nicht quoten, sondern musst die Liste aus ihren zukünftigen Eleemnten erst mal konstruieren, und das geht beispielsweise mit (list 1 hoehe). Mit cons erzeugt man aus zwei Elementen ein sogenanntes Dotted Pair, falls das zweite Element keine Liste ist.
Ein Dotted Pair ist eine besondere Form einer Liste, genau genommen die elementare Form einer Liste. Eigentlich ist nämlich jede Liste ein Dotted Pair aus dem CAR der Liste und dem CDR der Liste. Aber das führt für jetzt zu weit ...
Mehr findest Du bei Mapcar: http://www.autolisp-tutorial.mapcar.net/
[Diese Nachricht wurde von archtools am 17. Apr. 2011 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP