2010-11-12 13 views
0

J'ai essayé un exemple où nous devons passer une liste comme arguments et si la condition réussit je veux ajouter le résultat à une nouvelle liste.Ajout d'arguments à la liste provoque l'erreur

Voici le code:

(define get-description 
    (lambda (codeValue newList) 
    (cond 
     ((= (car codeValue) 1) (cons "A" newlist)) 
     ((= (car codeValue) 2)(cons "B" newlist))  
     ((= (car codeValue) 3) "C") 
     (else "Negative numbers are not valid")))) 

Je passe ce que l'appel de fonction:

(get-description (list 1 2 3) (list)) 

-je obtenir la sortie:

(cons "A" empty) 

sortie devrait simplement montrer: (A)

J'utilise DrRacket pour écrire mes programmes et j'ai choisi le mode de langue comme: Débutant.

Pourquoi ai-je cons et A avec "" et empty dans mon newlist?

Répondre

2

Veuillez ne pas utiliser "Beginning Student" comme type de langue dans Racket. C'est un sous-ensemble spécialement conçu pour le livre HtDP. Les langues "racket", "r5rs", "pretty big", ressemblent plus à de vrais schémas et devraient tous fonctionner pour The Little Schemer.

Dans votre liste d'arguments, vous avez (codeValue newList), mais dans le corps de programme se référer à newlist. Tous les schémas que j'ai utilisés sont sensible à la casse. En changeant votre newList en newlist, votre programme a parfaitement fonctionné chez Chez Scheme et Guile.

Edit: Pour clarifier les choses, "A" est une chaîne . Scheme a également le type de données supplémentaires symbole, qui est juste un nom et rien d'autre (et est probablement ce que vous voulez ici). Vous voulez probablement (cons 'A newlist) plutôt que (cons "A" newlist) si vous attendez (A).

-1

Les autres schémas n'imprimeraient que ("A"). Une telle sortie est clairement une idiosyncrasie du langage Racket.

Pour ce qui est de savoir pourquoi le A est entre guillemets, c'est parce qu'il s'agit d'un objet chaîne, et c'est ainsi que les objets chaîne sont imprimés. Mais si vous deviez AFFICHER un tel objet, vous obtiendriez le A par son seul.

+0

Cette sortie est spécifique à la langue de l'étudiant débutant. –