2017-03-10 9 views

Antwort

0

beachte, dass die Syntax eines if bedingt ist:

(if test-expr then-expr else-expr) 

so dass wenntest-expr beliebigen anderen Wert als #f erzeugt, dann then-expr ausgewertet wird, und wenn #f erzeugt wird, else-expr wird ausgewertet.

Sie haben zur Zeit folgendes:

(if (not (eq? current_token next_token)) (return #f)) 

, die gleich ist:

(if test-expr then-expr) 
; test-expr = (not (eq? current_token next_token)) 
; then-expr = (return #f) 
; Not complete - missing an else expression 

ein else expression Fügen Sie das Problem zu beheben.

Zum Beispiel:

> (if true 0)  ; test-expr = true, then-expr = 0 
if: missing an "else" expression in: (if true 0) 
> (if true 0 1) ; test-expr = true, then-expr = 0, else-expr = 1 
0 
> (if false 0 1) ; test-expr = false, then-expr = 0, else-expr = 1 
1 
0

Bilder sind wirklich schlechter Weg Code in Ihren Fragen einzubeziehen. Für alleif benötigen Sie 3 zusätzliche Elemente. (if predicate consequence alternative). In dem Code, den Sie enthalten, gibt es das Formular (not (eq? current_token next_token)), das das Prädikat ist, dann haben Sie (return #f), was das Ergebnis ist, aber Sie haben keine Alternative für, wenn das Prädikat falsch ist. Es hat nichts mit der else Begriff in der cond zu tun, weil das optional ist und es ist ein pert der cond nicht die if, die in einer der cond Konsequenten ist.

So wie ich es sehe, wenn und next-token beide Symbole sind, wird der Konseqent ausgewertet. Sobald ein Begriff getroffen wird, wird es die Konsequenzen haben und nicht andere Systeme werden besucht. Die if prüft dann, ob die beiden gleich sind. Wenn sie nicht gleich sind, tritt der Fehler auf.