Hallo!
Ich möchte eine Bemerkung zu der Übungs-Aufgabe 31 abgeben, weil mich diese Anfangs etwas verwirrt hatte.
Zitat (Frage + Lösung):
Zitat:
31. Welchen Wert hat die Variable a zum Schluss, wenn Sie folgendes nacheinander
eingeben:
(setq a 'b)
(setq b 'c)
(set a 1)
(setq b 2)(setq a 'b) … (eval a) -> nil … B wurde ja noch nichts zugewiesen
(setq b 'c) … (eval a) -> C
(set a 1) … (eval a) -> 1 … (eval b) -> 1
(setq b 2) … (eval a) -> 2 …(eval b) -> 2
Interessant, nicht?
Entweder ist die Fragestellung nach dem "Wert" der Variablen a hier falsch, oder die Funktion (eval ...) wird in der Lösung falsch verwendet. Wie auf Seite 77 (zum Glück) richtig erklärt wird, bewirkt der Ausdruck (eval a) nämlich eine DOPPELTE Evaluierung von a. Mit (eval a) wird eben NICHT der tatsächliche "Wert" von a ausgegeben. Der "Wert" von a nach (setq a 'b) ist nicht nil sondern B und das bleibt auch so bis zum Schluss dieses Beispiels. (Mit !a in der Befehlszeile kann man den echten "Wert" von a überprüfen, und da kommt dann auch B raus.)
Dies mag vielleicht für den einen oder anderen Verteidiger des Kochbuches eine unwichtige Kleinigkeit sein, aber es kann für einen Anfänger (für den das Buch ja geschrieben ist), sehr verwirrend und frustrierend sein, wenn nicht jede "Kleinigkeit" genau und korrekt ist.
------------------
Gruß, Stephan
www.stbartl.at
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP