Wie lese ich einen Eingabestrom bis EOF in Lisp? In C könntest du es so machen:
%Vor%Ich möchte in der Lage sein, Daten zu meinen Lisp-Programmen zu leiten, ohne die Datengröße im Voraus angeben zu müssen. Hier ist ein Beispiel von etwas, was ich gerade mache:
%Vor% In dieser Schleife gibt die Variable *n*
die Anzahl der Zeilen an, die ich dem Programm übergebe (der Wert wird aus der ersten Zeile der Eingabe gelesen), aber ich möchte nur eine willkürliche und unbekannte Anzahl von Zeilen verarbeiten Linien, stoppt, wenn es das Ende des Stroms erreicht.
read-line
verwendet ein optionales Argument ( eof-error-p
), das erlaubt, entweder NIL
(Standard) oder einen benutzerdefinierten Wert ( eof-value
) beim Treffer auf EOF
zurückzugeben, anstatt einen Fehler zu signalisieren.
Aus Kapitel 19 von Erfolgreichem Lisp :
READ-LINE & amp; optionaler Stream eof-error-p eof-Wert recursive-p
In den oben aufgeführten Lesefunktionen geben die optionalen Argumente
EOF-ERROR-P
undEOF-VALUE
an, was passiert, wenn Ihr Programm versucht, aus einem erschöpften Stream zu lesen. WennEOF-ERROR-P
wahr ist (der Standardwert), wird Lisp beim Versuch, einen erschöpften Stream zu lesen, einen Fehler anzeigen. WennEOF-ERROR-P
NIL ist, gibt LispEOF-VALUE
(defaultNIL
) zurück, anstatt einen Fehler zu signalisieren.
Sie können dies als einfache Abbruchbedingung für Ihre Funktion verwenden.
Siehe HyperSpec für READ-LINE
%Vor%oder manchmal mit nil
%Vor%Tags und Links lisp common-lisp eof