Question

J'essaie d'apprendre Scheme du livre "The Little Schemer". utiliser DrScheme sur un Macintosh. Il commence par des mots tels que "Quelle est la voiture de l où l est l’argument (a b c)?"

Je comprends que la réponse à cette question est un, mais je ne suis pas en mesure de comprendre quoi taper dans Dr Scheme pour "suivre". Une idée simple sur la façon d’attribuer à l tel que > (def l ('a' b 'c))

me donne l'erreur: "Appel de fonction: attend un nom défini ou un nom d'opération primitif après une parenthèse ouverte, mais a trouvé autre chose"

Était-ce utile?

La solution

Pour définir quelque chose:

(define <name> <value>)

Donc pour définir l:

(define l '(a b c))

Ceci définit l en tant que liste (a b c) . La guillemet simple cite tout ce qui se trouve après, qu'il s'agisse d'un symbole ou d'une liste, ce qui signifie que ce n'est pas évalué, mais lu tel quel. Vous ne ne citez cependant pas le nom que vous lui attribuez. Heureusement, il s’agit d’une des très rares opérations de Scheme où vous avez cette incohérence.

Autres conseils

Essayez ceci:

(define l '(a b c))

Ici, la citation s'applique à la liste entière (a b c) .

Ou utilisez simplement

(car '(a b c))

Ce que l'erreur vous dit, c'est ceci: quand le lecteur voit une liste, il veut traiter le premier élément de la liste comme une fonction. Voilà comment (+ 1 2 3) fonctionne: il appelle la fonction + . (Strictement, il regarde le symbole '+ et découvre qu'il existe une fonction liée à celle-ci, puis appelle cette fonction.)

Donc, quand vous tapez

(define l ('a 'b 'c))

il regarde la liste interne et veut ensuite trouver une fonction. Au lieu de cela, il trouve le symbole nommé a . Puisqu'il n'y a pas de fonction, vous obtenez l'erreur. Si, à la place, vous tapez

(define l '(a b c))

vous avez dit au lecteur via la citation que c'était pour traiter cela comme une liste sans essayer de l'interpréter.

Voici un exemple tiré de MIT Scheme sur un Mac:

1 ]=> (define li '(a b c))

;Value: li

1 ]=> (car li)

;Value: a

1 ]=> (car '(a b c ))

;Value: a

Forme non abstraite de

(define l '(a b c))  

est

(define l (quote (a b c)))  

ou dans ce cas même ceci:

(define l (list 'a 'b 'c))  

sans "liste" partie il essaie d'exécuter 'a, évidemment

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top