2010-11-21 7 views
1

Je suis nouveau sur le schéma et j'essaie de faire un petit programme très simple. Mais je reçois toujours ce message d'erreur "mot-clé syntaxique ne peut pas être utilisé comme une expression: si".Erreur de schéma: "Le mot clé syntaxique ne peut pas être utilisé comme une expression: si"

Quelqu'un peut-il me dire s'il me manque quelque chose dans mon programme ou si je fais une sorte d'erreur?

Voici mon programme.

(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) 

Merci

-Gunnlaugur

Répondre

2

Je ne sais pas ce que vous essayez de faire, mais il semble que si n'est pas nécessaire là:

(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 prend des expressions sous la forme *

(condition expr1 expr2 ... result) 

Puisque vous a donné

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

Scheme va essayer de voir si if est vrai, puis exécutez les quatre expressions (< (car lis) k), (display (car lis)), else et (display (cdr lis)). Il se heurte à quelques problèmes, cependant. if ne peut pas être évalué comme vrai ou faux, car c'est une syntaxe. Même si c'était le cas, vous obtiendriez une erreur misplaced aux keyword else. Et si cela ne se produisait pas, il ferait aussi bien (display (car lis)) et (display (cdr lis)) (qui est pas ce que vous voulez.

Je devine que vous ne voulez pas vraiment utiliser display. Si vous utilisez cette de manière interactive dans un terminal, schéma évaluera le résultat de votre fonction et l'imprimer pour vous.


* une légère simplification. Regardez dans TSPL4 pour plus de détails.

Questions connexes