Question

Je suis le jour 1 heure 1 de moi-même l'enseignement Scheme. Inutile de dire que je ne comprends pas tout. Donc, je lis The Little Schemer et en utilisant cette chose:

  

http://sisc-scheme.org/sisc-online.php

comme un interprète.

Je dois utiliser ' par exemple dans

(atom? 'turkey)

pour éviter une erreur « variable non définie ». Le ', selon le livre, est une chose commune Lisp.

J'ai deux questions:

  1. L'interprète je l'ai mentionné ci-dessus un bon? Pouvez-vous recommander un autre? J'ai besoin qui ira bien avec The Little Schemer .

  2. Qu'est-ce que '?

Était-ce utile?

La solution

La forme 'foo est simplement un moyen plus rapide de taper la forme spéciale

(quote foo)

ce qui est de dire. « Ne pas évaluer le nom foo et le remplacer par sa valeur, je veux dire vraiment le nom foo »

Je pense que SISC est parfaitement bien pour explorer les exercices TLS.

Autres conseils

Vous devez comprendre les règles d'évaluation de base du schéma.

Première :

(atom? 'turkey)

La liste est une application de fonction, donc atom? s'évalué à une fonction. 'turkey est une notation de raccourci pour (quote turkey). L'évaluation (quote turkey) donne le symbole turkey.

Alors la fonction suivante est appliquée au symbole turkey et une valeur de rendement est calculée.

Deuxième

(atom? turkey)

Encore une fois, nous avons une application de fonction et atom? obtient évalués à une fonction. Ce turkey temps est une variable. L'évaluation turkey donne la valeur qui est liée à ce -. Ce que jamais il est

Alors la fonction est appliquée à la valeur de la turkey variable.

Résumé

turkey est une variable qui obtient évaluée à sa valeur. 'turkey est (quote turkey), qui obtient évalué au symbole turkey.

Schéma réutilise s-expressions et renforce ses programmes de s-expressions. Cela conduit au problème que parfois turkey doit être une variable et parfois, il doit être le symbole. Ce chiffre est légèrement déroutant pour le débutant. Après un certain temps, vous verrez la puissance derrière.

SISC est bonne, mais un exécuteur testamentaire de régime en ligne encore plus léger est http://codepad.org . Ce n'est pas en fait un REPL en ce qu'il est pas interactif, mais il est assez proche. Code vous soumettez est exécuté sur le côté serveur au lieu d'utiliser un applet de navigateur. Et vous pouvez partager le code que vous utilisez par URL courte.

Le sur les sur CodePad dit qu'il utilise "MzScheme v372 [cgc]".

J'utilise CodePad pour tous les types de tests de bout rapide (y compris des exemples de code de test pour SO réponses!).

Pour la syntaxe de citation, la différence peut être vu en utilisant le code comme ceci:

(let ((x 5))
  (display x) (newline)
  (display 'x) (newline))

Cette affiche:

5
x

Dans le premier cas, x est évalué et passé à display, qui imprime 5. Dans le second cas, le symbole x (ce qui est la même chose que d'une chaîne de caractères) est passé à display, qui imprime le nom du symbole.

Raccourci pour (quote ...), ' se code dans les données.

stuff est un symbole, cela signifie qu'il peut être un nom d'une variable ou le nom d'une fonction, etc ..
'stuff vous donne le symbole « choses » lui-même.

(dostuff "on" those 4 :parameters) lors de l'évaluation, courrait fonction dostuff avec quatre paramètres:. Chaîne, le contenu de la variable ceux-ci, le nombre et mot-clé
'(dostuff "on" those 4 :parameters) lors de l'évaluation renverrait le code ci-dessus, qui, lors de l'évaluation, serait en fonction d'exécution tour dostuff avec quatre paramètres que ..

Par exemple: Exécutez '''somecode, il retourne ''somecode. Exécutez ''somecode, il retourne 'somecode. Exécutez 'somecode, il retourne somecode. Exécutez somecode, et ... eh bien ... somecode courra.

Vous pouvez dire que ' est un peu comme à l'opposé de (eval..).

(eval (eval (eval '''(print "hello")))) imprimerait "Bonjour".
(eval (eval (eval ''''(print "hello"))) - remarquez un plus ' puis eval - n'imprimer quoi que ce soit, mais il retournerait le code lui-même (print "hello") !!

Sauf que lispers ont tendance à appeler renvoyé le code (et parfois même le code écrit à la main) « liste » au lieu de « code », pour des raisons qui seront des saignements évidents que vous creuser un peu plus profond. Bonne chance :)

  1. Je vous suggère de passer à un meilleur environnement comme Scheme PLT , qui a un IDE, débogueur et beaucoup de bibliothèques. Comme vous aller de l'avant et de commencer à écrire des programmes plus importants, vous en aurez besoin.

  2. Le guillemet simple est le sucre syntaxique pour l'expression « citation », de sorte que la Turquie est le même que (dinde citation). En gros, ce que « citation » n'est d'éteindre l'évaluateur Scheme. En d'autres termes, « citation » renvoie l'expression, mot pour mot. S'il n'y avait pas de « citation », alors le schéma essaierait d'évaluer « la Turquie » dans l'environnement actuel. Ce n'est pas une chose commune Lisp, mais une chose Lisp. Common Lisp et Scheme sont deux dialectes de Lisp. Les utilisations de « citation » sont expliqués dans tous les tutoriels Lisp / livres. Voir aussi les réponses à href="https://stackoverflow.com/questions/134887/when-to-use-quote-in-lisp"> question.

Le guillemet simple est raccourci pour dire (citation foo) où citation est la forme pour revenir juste foo sans l'évaluer.

Une chose à retenir vraiment dans le schéma ou tout Lisp pour cette question est que tout est évalué par défaut. Ainsi, dans les cas où vous ne voulez pas vous évaluer besoin d'un moyen de cette assise.

quelque chose ne fonctionne tout simplement Citant cela et la seule citation est juste nécessite moins de frappe et conduit à un code moins verbeux.

Si vous cherchez un meilleur IDE pour scheme ensuite pour Dr Racket. Mais au moment du départ Dr Racket première ligne devrait être #lang scheme depuis Dr Racket a beaucoup la langue que nous avons explicitement mention de la langue que nous allons utiliser.

Quand on veut passer un argument lui-même au lieu de passer la valeur de l'argument nous utilisons citation. Il est principalement lié au passage de la procédure au cours de l'utilisation des listes, des paires et des atomes qui ne sont pas disponibles dans le langage de programmation C (la plupart des gens commencent à la programmation en utilisant la programmation C, où nous devenons confus) Ce code en langage de programmation Scheme qui est un dialecte de Lisp et je suppose que vous pouvez comprendre ce code.

(define atom?              ; defining a procedure atom?
(lambda (x)              ; which as one argument x
(and (not (null? x)) (not(pair? x) )))) ; checks if the argument is atom or not
(atom? '(a b c)) ; since it is a list it is false #f

La dernière ligne (atome? Abc) passe abc comme il est à la procédure pour vérifier si abc est un atome ou non, mais quand vous passez (atome? Abc), il vérifie la valeur de abc et passses la valeur. Depuis, nous avons fourni aucune valeur à ce

scroll top