[RUBY] Mettre en œuvre REPL

Si vous êtes exposé aux langages de programmation, vous souhaiterez implémenter REPL.

Abréviation de boucle Read-eval-print Lisez, évaluez, affichez et répétez comme des lettres. Fait référence à un environnement d'évaluation interactif.

Qu'est-ce que REPL? -Hatena Keyword

Je vois.

(loop (print (eval (read))))

Lire dans l'ordre à partir de la droite, "Read-Eval-Print Loop" est certainement ** REPL **.

Si vous souhaitez exécuter le contenu de cet article et vous arrêter au milieu, utilisez Ctrl + D </ kbd> ou Ctrl + C </ kbd>.

Faisons-le avec Ruby.

% ruby -e'loop{p eval gets}'
1 + 2 * 3
7
"Pixiv".downcase
"pixiv"

Ouais, c'est parfait. «Boucle Gets-Eval-P» est ** GEPL **.

PHP est un peu plus long.

% php -r'while(1){ $code = sprintf("\$result = %s;", fgets(STDIN)); eval($code); var_dump($result); }'
1 + 2 * 3
int(7)
strtolower("Pixiv")
string(5) "pixiv"

«Vardump-Eval-Fgets While» est ** VEFW **. Qu'Est-ce que c'est?

Et Python (2.7)? Il est très difficile d'écrire avec une seule doublure.

% python -c "while True:
    print(input())
"
1 + 2 * 3
7
"Pixiv".lower()
pixiv

Je ne sais pas pourquoi, mais la série Python 2 ʻinput () est identique à ʻeval (raw_input (prompt)). Tout le monde se demandait qui l'obtiendrait ... Python 3000 ʻinput () est le même que la 2e série raw_input () `.

«Input-Print While» est ** IPW **. Ou ** REPW ** avec "Rawinput-Eval-Print-While"!

finalement

J'ai écrit quelque chose comme ~ en Lisp, mais je n'ai pas écrit correctement Common Lisp, alors je l'ai essayé.

% sbcl
This is SBCL 1.2.16, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
* (loop (print (eval (read))))
(+ 1 (* 2 3))

7
debugger invoked on a END-OF-FILE in thread
#<THREAD "main thread" RUNNING {1002C74753}>:
  end of file on #<SB-SYS:FD-STREAM for "standard input" {100632C013}>

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-IMPL::INPUT-CHAR/UTF-8 #<SB-SYS:FD-STREAM for "standard input" {100632C013}> T 0)
0](string-downcase "Pixiv")

"pixiv"
0] ^D
*

Je ne suis pas sûr, mais je n'ai pas reçu l'invite par défaut «*», donc j'avais l'impression que cela fonctionnait. (Peut-être que ça ne marche pas)

J'ai aussi pensé à étudier Perl, mais je ne comprenais pas le type de données, alors j'ai abandonné.

Recommended Posts

Mettre en œuvre REPL
Implémenter le modèle Singleton en Python
Implémentez le Perceptron multicouche de manière très soignée
Mettre en œuvre RSA
Mettre en œuvre la recherche de chemin le plus court pour le labyrinthe
[Python] Simulation de fluides: implémenter l'équation de transfert
Implémenter une partie du processus en C ++
[Python] Simulation de fluides: implémenter l'équation de diffusion
[Keras] Implémenter un étudiant bruyant et vérifier l'effet
Implémentez la fonction de saisie semi-automatique sur l'écran d'administration de Django
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
Accédez aux variables définies dans le script depuis REPL