LISP - Eingabe & Ausgabe
Common LISP bietet zahlreiche Eingabe-Ausgabe-Funktionen. Wir haben bereits die Formatierungsfunktion und die Druckfunktion für die Ausgabe verwendet. In diesem Abschnitt werden einige der am häufigsten verwendeten Eingabe-Ausgabe-Funktionen in LISP vorgestellt.
Eingabefunktionen
Die folgende Tabelle enthält die am häufigsten verwendeten Eingabefunktionen von LISP -
Sr.Nr. | Bedienungsanleitung |
---|---|
1 | read& optionaler Eingabestream eof-error-p eof-Wert rekursiv-p Es liest die gedruckte Darstellung eines Lisp-Objekts aus dem Eingabestream ein, erstellt ein entsprechendes Lisp-Objekt und gibt das Objekt zurück. |
2 | read-preserving-whitespace& optionaler In-Stream-Eof-Fehler-p Eof-Wert rekursiv-p Es wird in einigen speziellen Situationen verwendet, in denen es wünschenswert ist, genau zu bestimmen, welches Zeichen das erweiterte Token beendet hat. |
3 | read-line& optionaler Eingabestream eof-error-p eof-Wert rekursiv-p Es liest eine Textzeile ein, die durch eine neue Zeile abgeschlossen ist. |
4 | read-char& optionaler Eingabestream eof-error-p eof-Wert rekursiv-p Es nimmt ein Zeichen aus dem Eingabestream und gibt es als Zeichenobjekt zurück. |
5 | unread-char Zeichen & optionaler Eingabestream Das zuletzt aus dem Eingabestream gelesene Zeichen wird auf die Vorderseite des Eingabestreams gesetzt. |
6 | peek-char& optionaler Peek-Typ-Eingabestream eof-error-p eof-value recursive-p Es gibt das nächste Zeichen zurück, das aus dem Eingabestream gelesen werden soll, ohne es tatsächlich aus dem Eingabestream zu entfernen. |
7 | listen& optionaler Eingabestream Das Prädikat listen ist wahr, wenn ein Zeichen sofort im Eingabestream verfügbar ist, und ist falsch, wenn nicht. |
8 | read-char-no-hang& optionaler Eingabestream eof-error-p eof-Wert rekursiv-p Es ist ähnlich wie read-char, aber wenn es kein Zeichen bekommt, wartet es nicht auf ein Zeichen, sondern gibt sofort null zurück. |
9 | clear-input& optionaler Eingabestream Es löscht alle gepufferten Eingaben, die dem Eingabestream zugeordnet sind. |
10 | read-from-string Zeichenfolge & optionaler eof-error-p eof-Wert & Schlüssel: Start: Ende: Erhalten-Leerzeichen Es nimmt die Zeichen der Zeichenfolge nacheinander auf, erstellt ein LISP-Objekt und gibt das Objekt zurück. Es gibt auch den Index des ersten Zeichens in der nicht gelesenen Zeichenfolge oder die Länge der Zeichenfolge (oder gegebenenfalls die Länge +1) zurück. |
11 | parse-integer Zeichenfolge & Schlüssel: Start: Ende: Radix: Junk-erlaubt Es wird die Teilzeichenfolge der Zeichenfolge untersucht, die durch: start und: end begrenzt ist (standardmäßig Anfang und Ende der Zeichenfolge). Es überspringt Leerzeichen und versucht dann, eine Ganzzahl zu analysieren. |
12 | read-byte Binär-Eingangsstrom & optional EOF-error-p EOF-Wert Es liest ein Byte aus dem Binäreingabestream und gibt es in Form einer Ganzzahl zurück. |
Eingabe von Tastatur lesen
Das readDie Funktion dient zur Eingabe über die Tastatur. Es darf kein Argument sein.
Betrachten Sie zum Beispiel das Code-Snippet -
(write ( + 15.0 (read)))
Angenommen, der Benutzer gibt 10.2 über die STDIN-Eingabe ein.
25.2
Die Lesefunktion liest Zeichen aus einem Eingabestream und interpretiert sie durch Parsen als Darstellungen von Lisp-Objekten.
Beispiel
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein:
; the function AreaOfCircle
; calculates area of a circle
; when the radius is input from keyboard
(defun AreaOfCircle()
(terpri)
(princ "Enter Radius: ")
(setq radius (read))
(setq area (* 3.1416 radius radius))
(princ "Area: ")
(write area))
(AreaOfCircle)
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
Enter Radius: 5 (STDIN Input)
Area: 78.53999
Beispiel
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.
(with-input-from-string (stream "Welcome to Tutorials Point!")
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (peek-char nil stream nil 'the-end))
(values)
)
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
#\W
#\e
#\l
#\c
#\o
#\m
#\e
#\Space
#\t
#\o
#\Space
Die Ausgabefunktionen
Alle Ausgabefunktionen in LISP verwenden ein optionales Argument namens Ausgabestream, an das die Ausgabe gesendet wird. Wenn nicht erwähnt oder null, wird für den Ausgabestream standardmäßig der Wert der Variablen * Standardausgabe * verwendet.
Die folgende Tabelle enthält die am häufigsten verwendeten Ausgabefunktionen von LISP -
Sr.Nr. | Funktion und Beschreibung |
---|---|
1 | write Objekt & Schlüssel: Stream: Escape: Radix: Basis: Kreis: Hübsch: Ebene: Länge: Fall: Gensym: Array write Objekt & Schlüssel: Stream: Escape: Radix: Basis: Kreis: Hübsch: Ebene: Länge: Fall: Gensym: Array: Lesbar: Rechter Rand: Geizhals-Breite: Zeilen: Druckabzug Beide schreiben das Objekt in den durch: stream angegebenen Ausgabestream, der standardmäßig den Wert * standard-output * verwendet. Andere Werte sind standardmäßig die entsprechenden globalen Variablen, die zum Drucken festgelegt wurden. |
2 | prin1 Objekt & optionaler Ausgabestream print Objekt & optionaler Ausgabestream pprint Objekt & optionaler Ausgabestream princ Objekt & optionaler Ausgabestream Alle diese Funktionen geben die gedruckte Darstellung des Objekts an den Ausgabestream aus . Es gibt jedoch die folgenden Unterschiede:
|
3 | write-to-string Objekt & Schlüssel : Escape: Radix: Basis: Kreis: Hübsch: Ebene: Länge: Fall: Gensym: Array write-to-string Objekt & Schlüssel: Escape: Radix: Basis: Kreis: Hübsch: Ebene: Länge: Groß- / Kleinschreibung: Gensym: Array: Lesbar: Rechter Rand: Geizhals-Breite: Zeilen: Druck-Versand prin1-to-string Objekt princ-to-string Objekt Das Objekt wird effektiv gedruckt und die Ausgabezeichen werden zu einer Zeichenfolge verarbeitet, die zurückgegeben wird. |
4 | write-char Zeichen & optionaler Ausgabestream Es gibt das Zeichen an den Ausgabestream aus und gibt das Zeichen zurück. |
5 | write-string Zeichenfolge & optionaler Ausgabestream & Schlüssel: Start: Ende Es schreibt die Zeichen des angegebenen Teilstrings der Zeichenfolge in den Ausgabestream. |
6 | write-line Zeichenfolge & optionaler Ausgabestream & Schlüssel: Start: Ende Es funktioniert genauso wie Write-String, gibt danach jedoch eine neue Zeile aus. |
7 | terpri& optionaler Ausgabestream Es gibt eine neue Zeile an den Ausgabestream aus. |
8 | fresh-line& optionaler Ausgabestream Es wird nur dann eine neue Zeile ausgegeben, wenn sich der Stream noch nicht am Anfang einer Zeile befindet. |
9 | finish-output& optionaler Ausgabestream force-output& optionaler Ausgabestream clear-output& optionaler Ausgabestream
|
10 | write-byte Integer-Binärausgangsstrom Es schreibt ein Byte, den Wert der Ganzzahl. |
Beispiel
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.
; this program inputs a numbers and doubles it
(defun DoubleNumber()
(terpri)
(princ "Enter Number : ")
(setq n1 (read))
(setq doubled (* 2.0 n1))
(princ "The Number: ")
(write n1)
(terpri)
(princ "The Number Doubled: ")
(write doubled)
)
(DoubleNumber)
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
Enter Number : 3456.78 (STDIN Input)
The Number: 3456.78
The Number Doubled: 6913.56
Formatierte Ausgabe
Die Funktion formatwird zum Erstellen von schön formatiertem Text verwendet. Es hat die folgende Syntax -
format destination control-string &rest arguments
wo,
- Ziel ist die Standardausgabe
- Steuerzeichenfolge enthält die auszugebenden Zeichen und die Druckanweisung.
EIN format directive besteht aus einer Tilde (~), optionalen Präfixparametern, die durch Kommas getrennt sind, optionalen Modifikatoren für Doppelpunkte (:) und at-sign (@) sowie einem einzelnen Zeichen, das angibt, um welche Art von Direktive es sich handelt.
Die Präfixparameter sind im Allgemeinen Ganzzahlen, die als optional vorzeichenbehaftete Dezimalzahlen notiert sind.
Die folgende Tabelle enthält eine kurze Beschreibung der häufig verwendeten Richtlinien -
Sr.Nr. | Richtlinie & Beschreibung |
---|---|
1 | ~A Wird von ASCII-Argumenten gefolgt. |
2 | ~S Es folgen S-Ausdrücke. |
3 | ~D Für Dezimalargumente. |
4 | ~B Für binäre Argumente. |
5 | ~O Für oktale Argumente. |
6 | ~X Für hexadezimale Argumente. |
7 | ~C Für Zeichenargumente. |
8 | ~F Für Gleitkomma-Argumente mit festem Format. |
9 | ~E Exponentielle Gleitkomma-Argumente. |
10 | ~$ Dollar- und Gleitkomma-Argumente. |
11 | ~% Eine neue Zeile wird gedruckt. |
12 | ~* Das nächste Argument wird ignoriert. |
13 | ~? Indirektion. Das nächste Argument muss eine Zeichenfolge und das nachfolgende eine Liste sein. |
Beispiel
Schreiben wir das Programm zur Berechnung der Kreisfläche neu -
Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.
(defun AreaOfCircle()
(terpri)
(princ "Enter Radius: ")
(setq radius (read))
(setq area (* 3.1416 radius radius))
(format t "Radius: = ~F~% Area = ~F" radius area)
)
(AreaOfCircle)
Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:
Enter Radius: 10.234 (STDIN Input)
Radius: = 10.234
Area = 329.03473