4 Stimmen

Eine Zeile mit Benutzereingaben in Scheme erhalten?

Ich weiß, dass Sie (read) verwenden können, um einen vom Benutzer eingegebenen Ausdruck zu erhalten, aber (read) erhält nur den ersten Ausdruck und wertet alles danach aus. Ich habe mich gefragt, ob es eine Möglichkeit gibt, eine ganze Zeile mit Benutzereingaben zu lesen und diese Zeile vielleicht in eine Liste zu verwandeln?

(let ((input (read-user-line)))
   ;; user could type "cons 2 3" without quotes
   ;; input could contain '(cons 2 3)
   (apply (car input) (cdr input)))

Danke!

5voto

Nietzche-jou Punkte 14185

Wenn Ihr Schema eine R6RS-Implementierung ist, können Sie GET-LINE verwenden. Wenn dasselbe Schema auch SRFI-13 implementiert, können Sie STRING-TOKENIZE verwenden, um es in eine Liste zu verwandeln.

Ein Programm, das sich dafür eignet, ist Ypsilon:

(import (srfi srfi-13))

(let ((input (get-line (current-input-port))))
  (for-each (lambda (x) (display x) (newline))
            (string-tokenize input)))
    $ **ypsilon try.scm**
**the quick brown fox jumps over the lazy dog.**
the
quick
brown
fox
jumps
over
the
lazy
dog.

Andernfalls sind Sie mit den nicht standardisierten Erweiterungen, die Ihre Implementierung bietet, auf sich allein gestellt.

2voto

Eli Barzilay Punkte 28564

Einige Schemata haben eine read-line Funktion, die eine Zeile liest und sie als Zeichenkette zurückgibt.

(Aber um davon zu etwas zu kommen, das man apply ist eine andere Geschichte.)

0voto

Zorf Punkte 5860

Sie können read-line verwenden, um sie als Zeichenkette zu lesen.

Dann teilen Sie sie einfach durch Leerzeichen in eine Liste von Zeichenketten auf

Dann verwenden Sie read auf diese mit with-input-from-string

Und dann verwenden Sie Anwenden.

Man kann nicht nur Strings anwenden, sondern nur Schemadaten, Strings sind Schemadaten, ja, aber keine Prozeduren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X