2010-04-29 11 views
4

j'utilise drscheme de: erreurs http://www.archlinux.org/packages/extra/x86_64/drscheme/« non consolidé » identifiant les erreurs dans le schéma

Je suis en train de travailler avec l'exemple de code dans mon manuel, mais je continue à me faire « identifiant » non lié. Est-ce parce que l'interpréteur de schéma n'est pas configuré correctement? ou est-ce que le code est tout simplement faux?

Voici quelques exemples:

Entrée:

#lang scheme 
(define (equalimp lis1 lis2) 
     (COND 
     ((NULL? lis1) (NULL? lis2)) 
     ((NULL? lis2) '()) 
     ((EQ? (CAR lis1) (CAR lis2)) (equalimp (CDR lis1) (CDR lis2))) 
     (ELSE '()) 
)) 

Sortie:

Bienvenue sur DrScheme, la version 4.2.5 [3m]. Langue: schéma; limite de mémoire: 128 Mo.

agrandir: identificateur non lié au module: COND

entrée:

#lang scheme 
(define (quadratic_roots a b c) 
    (LET (
     (root_part_over_2a 
     (/ (SQRT (- (* b b) (* 4 a c))) (* 2 a))) 
     (minus_b_over_2a (/ (- 0 b) (* 2 a))) 
     ) 
    (DISPLAY (+ minus_b_over_2a root_part_over_2a)) 
    (NEWLINE) 
    (DISPLAY (- minus_b_over_2a root_part_over_2a)) 
)) 

sortie:

développer: identificateur non lié dans le module en: louer

Note: J'ai essayé d'utiliser LET * parce que j'ai lu ceci: stackoverflow.com/ questions/946050/using-let-in-scheme mais il produit la même erreur.

Merci!

+0

Vous utilisez un schéma #lang sensible à la casse. – grettke

Répondre

5

Cela ressemble à un problème de sensibilité à la casse pour ce paramètre de langue. Je sais que le schéma est censé être insensible à la casse, mais quand j'ai essayé

(define (equalimp lis1 lis2) 
     (cond 
     ((null lis1) (null? lis2)) 
     ((null? lis2) '()) 
     ((eq? (car lis1) (car lis2)) (equalimp (cdr lis1) (cdr lis2))) 
     (else '()) 
)) 

cela a fonctionné très bien.

+0

En fait, je viens de vérifier le R6RS et il est maintenant sensible à la casse! Depuis PLT étaient un grand partisan de R6RS je suppose que c'est la source du problème. –

+0

Ça marche! Je vous remercie! – cnandreu