2017-05-30 1 views
-1

So ich Ich versuche Lisp zu lehren, ich bin zur Zeit dieser Website als Referenz: https://www.tutorialspoint.com/lisp/lisp_if_construct.htmIf-Anweisung mit THEN-Klausel (LISP)

Ich verstehe nicht ganz, warum die dann Klausel ausgeführt wird, trotz der Tatsache, dass die If-Klausel falsch ist?

(setq a 10) 
(if (> a 20) 
    then (format t "~% a is less than 20")) 
(format t "~% value of a is ~d " a) 

Die Ausgabe lautet:

a is less than 20 
value of a is 10 

Ist die dann Klausel nur immer ausführen, auch wenn die if-Anweisung falsch ist? (was in diesem Fall ist).

Jede Hilfe wäre willkommen, auch Entschuldigung, wenn meine Terminologie völlig falsch ist Ich bin noch neu bei Lisp!

+0

Dieses Tutorial scheint ein bisschen Quatsch. Es gibt gute freie Lisp-Bücher online verfügbar, wie Peter Seibels [Practical Common Lisp] (http://www.gigamonkeys.com/book/). – molbdnilo

Antwort

4

Nach,ein if hat 3 Elemente. test-expression zB (> a 10), eine then-expression zB (- a 10) und eine else-expression zB. a:

(if (> a 10) ; if a is larger than 10 
    (- a 10) ; then return the value of a minus 10 
    a)  ; else return the value of a 

Schauen Sie sich Ihr Code:

(if (> a 20)       ; if a is larger than 20 
    then        ; then return the value of "then" 
    (format t "~% a is less than 20")); else print a is less than 20 to screen 

In diesem Beispiel vorausgesetzt, dass sie die dann Klausel als einzige Variable then. Da der Test falsch ist, wird der Else-Ausdruck immer gedruckt.

+0

Danke, aber ich bin mir nicht ganz sicher, ob ich deine Erklärung verstehe? Warum gibt es dann einen Wert zurück, obwohl die if-Anweisung nicht erfüllt ist? –

+0

'then' ist kein Schlüsselwort, daher wird angenommen, dass es der Code ist, der ausgeführt wird, wenn der Test wahr ist. Wenn der Test wahr ist, hätten Sie den Fehler, dass' then' keine gebundene Variable ist. Jedes ausgewertete Symbol ist eine Variable, genau wie 'a' in Ihrem Beispiel. – Sylwester

+0

Sie können den Lisp-Code auch direkt auf der Seite testen, falls Sie damit herumspielen wollten :) Aber ich bin ziemlich verwirrt, wenn ich sehe, wie wenn sie dann verwenden, bekommen sie ein anderes Ergebnis als wenn sie es auslassen. –