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:

  • prin1 gibt das Objekt als Wert zurück.

  • print druckt das Objekt mit einer vorangegangenen neuen Zeile und gefolgt von einem Leerzeichen. Es gibt ein Objekt zurück.

  • pprint ist genau wie print, nur dass der nachgestellte Leerzeichen weggelassen wird.

  • princ ist genau wie prin1, nur dass die Ausgabe kein Escapezeichen hat

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

  • Die Funktion finish-output versucht sicherzustellen, dass alle an den Ausgabestream gesendeten Ausgaben ihr Ziel erreicht haben, und gibt erst dann null zurück.

  • Die Funktion force-output Initiiert das Entleeren aller internen Puffer, gibt jedoch Null zurück, ohne auf den Abschluss oder die Bestätigung zu warten.

  • Die Funktion clear-output Es wird versucht, eine ausstehende Ausgabeoperation abzubrechen, damit so wenig Ausgabe wie möglich zum Ziel weitergeleitet werden kann.

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