2010-11-21 4 views
1

Ich bin neu im Schema und ich versuche, ein kleines, sehr geradliniges Programm zu machen. Aber ich bekomme immer die Fehlermeldung "Syntaktisches Schlüsselwort darf nicht als Ausdruck verwendet werden: if".Schema-Fehler: "Syntaktisches Schlüsselwort darf nicht als Ausdruck verwendet werden: if"

Kann mir jemand sagen, ob ich etwas in meinem Programm verpasse oder ob ich einen Fehler mache?

Hier ist mein Programm.

(define (foo lis k) 
(COND 
    ((NULL? lis) '()) 
    (IF (< (CAR lis) k) 
    (display (CAR lis)) 
    ELSE (display (CDR lis))) 
)) 
(foo '(1 5 3 2 4) 3) 

Dank

-Gunnlaugur

Antwort

2

Ich bin nicht sicher, was Sie versuchen zu tun, aber es scheint, wie wenn nicht dort gebraucht:

(define (foo lis k) 
    (cond 
    ((null? lis) '()) 
    ((< (car lis) k) 
     (display (car lis))) 
    (else (display (cdr lis))))) 
(foo '(1 5 3 2 4) 3) 
0

cond Ausdrücke nimmt in der Form *

(condition expr1 expr2 ... result) 

Da gab man

(if (< (car lis) k) (display (car lis)) else (display (cdr lis))) 

Schema versuchen zu sehen, ob if wahr ist, und dann die nächsten vier Ausdrücke laufen (< (car lis) k), (display (car lis)), else und (display (cdr lis)). Es läuft jedoch in ein paar Probleme. if kann nicht als wahr oder falsch bewertet werden, da es sich um Syntax handelt. Selbst wenn es sein könnte, würden Sie einen misplaced aux keyword else Fehler erhalten. Und wenn das nicht der Fall war, würde es tun sowohl(display (car lis)) und (display (cdr lis)) (das ist nicht das, was Sie wollen.

ich vermute ich, dass Sie eigentlich gar nicht display verwenden möchten. Wenn Sie mit dieser interaktiv in einem Terminal, wird Schema das Ergebnis Ihrer Funktion auswerten und drucken es für Sie.


* eine leichte Vereinfachung. Schauen Sie in TSPL4 für Details.

Verwandte Themen