[PYTHON] Implementieren Sie REPL

Wenn Sie mit Programmiersprachen vertraut sind, sollten Sie REPL implementieren.

Abkürzung für Read-Eval-Print-Schleife Lesen, bewerten, anzeigen und wiederholen Sie wie Buchstaben. Bezieht sich auf eine interaktive Evaluierungsumgebung.

Was ist REPL? -Hatena-Schlüsselwort

Aha.

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

Lesen Sie in der Reihenfolge von rechts, "Read-Eval-Print Loop" ist sicherlich ** REPL **.

Wenn Sie den Inhalt dieses Artikels ausführen und in der Mitte anhalten möchten, verwenden Sie Strg + D </ kbd> oder Strg + C </ kbd>.

Lass es uns mit Ruby machen.

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

Ja, es ist perfekt. "Gets-Eval-P-Schleife" ist ** GEPL **.

PHP ist etwas länger.

% 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" ist ** VEFW **. Was ist es?

Wie wäre es mit Python (2.7)? Es ist sehr schwer, mit einem Liner zu schreiben.

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

Ich weiß nicht warum, aber die Python 2-Serie "input ()" ist dieselbe wie "eval (raw_input (prompt))". Alle fragten sich, wer es bekommen würde ... Die Python 3000 input () ist die gleiche wie die 2. Serieraw_input ().

"Input-Print While" ist ** IPW **. Oder ** REPW ** mit "Rawinput-Eval-Print-While"!

Schließlich

Ich habe so etwas wie ~ in Lisp geschrieben, aber ich habe Common Lisp nicht richtig geschrieben, also habe ich es versucht.

% 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
*

Ich bin mir nicht sicher, aber ich habe nicht die Standardaufforderung "*" erhalten, also hatte ich das Gefühl, dass es funktioniert. (Vielleicht funktioniert es nicht)

Ich habe auch darüber nachgedacht, Perl zu studieren, aber ich habe den Datentyp nicht verstanden, also habe ich aufgegeben.

Recommended Posts

Implementieren Sie REPL
Implementieren Sie das Singleton-Muster in Python
Implementieren Sie das mehrschichtige Perceptron sehr ordentlich
Implementieren Sie RSA
Implementieren Sie die Suche nach dem kürzesten Pfad für das Labyrinth
[Python] Flüssigkeitssimulation: Implementieren Sie die Übertragungsgleichung
Implementieren Sie einen Teil des Prozesses in C ++
[Python] Fluidsimulation: Implementieren Sie die Diffusionsgleichung
[Keras] Implementiere einen lauten Schüler und überprüfe den Effekt
Implementieren Sie die Autovervollständigungsfunktion auf dem Django-Verwaltungsbildschirm
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Greifen Sie über REPL auf die im Skript definierten Variablen zu