LISP - Input & Output
LISP umum menyediakan berbagai fungsi input-output. Kami telah menggunakan fungsi format, dan fungsi cetak untuk keluaran. Pada bagian ini, kita akan melihat beberapa fungsi input-output yang paling umum digunakan yang disediakan di LISP.
Fungsi Input
Tabel berikut menyediakan fungsi input LISP yang paling umum digunakan -
Sr.No. | Deskripsi fungsi |
---|---|
1 | read& opsional aliran input eof-error-p eof-nilai rekursif-p Itu membaca dalam representasi tercetak dari objek Lisp dari input-stream, membangun objek Lisp yang sesuai, dan mengembalikan objek. |
2 | read-preserving-whitespace& opsional in-stream eof-error-p eof-value recursive-p Ini digunakan dalam beberapa situasi khusus di mana diinginkan untuk menentukan dengan tepat karakter apa yang menghentikan token yang diperpanjang. |
3 | read-line& opsional aliran input eof-error-p eof-nilai rekursif-p Itu berbunyi dalam baris teks yang diakhiri oleh baris baru. |
4 | read-char& opsional aliran input eof-error-p eof-nilai rekursif-p Dibutuhkan satu karakter dari input-stream dan mengembalikannya sebagai objek karakter. |
5 | unread-char karakter & aliran input opsional Ini menempatkan karakter yang terakhir dibaca dari input-stream, ke depan input-stream. |
6 | peek-char& opsional tipe intip input-stream eof-error-p eof-value recursive-p Ini mengembalikan karakter berikutnya untuk dibaca dari aliran input, tanpa benar-benar menghapusnya dari aliran input. |
7 | listen& aliran masukan opsional Predikatnya listen benar jika ada karakter yang segera tersedia dari input-stream, dan salah jika tidak. |
8 | read-char-no-hang& opsional aliran input eof-error-p eof-nilai rekursif-p Ini mirip dengan read-char, tetapi jika tidak mendapatkan karakter, itu tidak menunggu karakter, tetapi segera mengembalikan nol. |
9 | clear-input& aliran masukan opsional Ini membersihkan semua input buffer yang terkait dengan input-stream. |
10 | read-from-string string & opsional eof-error-p eof-value & key: start: end: pertahankan-whitespace Ini mengambil karakter string secara berurutan dan membangun objek LISP dan mengembalikan objek tersebut. Ini juga mengembalikan indeks dari karakter pertama dalam string yang tidak dibaca, atau panjang string (atau, panjang +1), seperti yang mungkin terjadi. |
11 | parse-integer string & key: start: end: radix: junk-Allowed Ini memeriksa substring dari string yang dibatasi oleh: start dan: end (default ke awal dan akhir string). Ini melompati karakter spasi dan kemudian mencoba untuk mengurai integer. |
12 | read-byte arus masukan biner & nilai eof-error-p opsional Itu membaca satu byte dari aliran input-biner dan mengembalikannya dalam bentuk integer. |
Membaca Input dari Keyboard
Itu readfungsi digunakan untuk mengambil input dari keyboard. Ini mungkin tidak membutuhkan argumen apapun.
Misalnya, pertimbangkan cuplikan kode -
(write ( + 15.0 (read)))
Asumsikan pengguna memasukkan 10.2 dari Input STDIN, ia mengembalikan,
25.2
Fungsi baca membaca karakter dari aliran input dan menafsirkannya dengan parsing sebagai representasi objek Lisp.
Contoh
Buat file kode sumber baru bernama main.lisp dan ketik kode berikut di dalamnya -
; 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)
Saat Anda menjalankan kode, ia mengembalikan hasil berikut -
Enter Radius: 5 (STDIN Input)
Area: 78.53999
Contoh
Buat file kode sumber baru bernama main.lisp dan ketikkan kode berikut di dalamnya.
(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)
)
Saat Anda menjalankan kode, ia mengembalikan hasil berikut -
#\W
#\e
#\l
#\c
#\o
#\m
#\e
#\Space
#\t
#\o
#\Space
Fungsi Output
Semua fungsi output di LISP menggunakan argumen opsional yang disebut output-stream, di mana output dikirim. Jika tidak disebutkan atau nihil, aliran keluaran default ke nilai variabel * standar-keluaran *.
Tabel berikut menyediakan fungsi keluaran LISP yang paling umum digunakan -
Sr.No. | Fungsi dan Deskripsi |
---|---|
1 | write object & key: stream: escape: radix: base: circle: pretty: level: length: case: gensym: array write object & key: stream: escape: radix: base: circle: pretty: level: length: case: gensym: array: readably: margin kanan: kikir-lebar: baris: pprint-dispatch Keduanya menulis objek ke aliran keluaran yang ditentukan oleh: stream, yang secara default ke nilai * standard-output *. Nilai lain default ke variabel global terkait yang ditetapkan untuk pencetakan. |
2 | prin1 objek & aliran keluaran opsional print objek & aliran keluaran opsional pprint objek & aliran keluaran opsional princ objek & aliran keluaran opsional Semua fungsi ini mengeluarkan representasi tercetak dari objek ke aliran keluaran . Namun, ada perbedaan berikut -
|
3 | write-to-string objek & kunci : escape: radix: base: circle: cantik: level: length: case: gensym: array write-to-string object & key: escape: radix: base: circle: pretty: level: length: case: gensym: array: readably: right-margin: miser-width: lines: pprint-dispatch prin1-to-string obyek princ-to-string obyek Objek secara efektif dicetak dan karakter keluaran dibuat menjadi string, yang dikembalikan. |
4 | write-char karakter & aliran keluaran opsional Ini mengeluarkan karakter ke aliran keluaran, dan mengembalikan karakter. |
5 | write-string string & opsional aliran keluaran & kunci: mulai: akhir Ini menulis karakter dari substring tertentu dari string ke output-stream. |
6 | write-line string & opsional aliran keluaran & kunci: mulai: akhir Ini bekerja dengan cara yang sama seperti menulis-string, tetapi mengeluarkan baris baru sesudahnya. |
7 | terpri& arus keluaran opsional Ini mengeluarkan baris baru ke arus keluaran. |
8 | fresh-line& arus keluaran opsional itu mengeluarkan baris baru hanya jika aliran belum di awal baris. |
9 | finish-output& arus keluaran opsional force-output& arus keluaran opsional clear-output& arus keluaran opsional
|
10 | write-byte integer binary-output-stream Ini menulis satu byte, nilai integer. |
Contoh
Buat file kode sumber baru bernama main.lisp dan ketikkan kode berikut di dalamnya.
; 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)
Saat Anda menjalankan kode, ia mengembalikan hasil berikut -
Enter Number : 3456.78 (STDIN Input)
The Number: 3456.78
The Number Doubled: 6913.56
Output Terformat
Fungsinya formatdigunakan untuk menghasilkan teks yang diformat dengan baik. Ini memiliki sintaks berikut -
format destination control-string &rest arguments
dimana,
- tujuan adalah keluaran standar
- control-string menampung karakter yang akan dikeluarkan dan petunjuk pencetakan.
SEBUAH format directive terdiri dari tilde (~), parameter awalan opsional yang dipisahkan oleh koma, pengubah titik dua opsional (:) dan at-sign (@), dan satu karakter yang menunjukkan jenis direktif ini.
Parameter awalan umumnya bilangan bulat, dinotasikan sebagai bilangan desimal bertanda opsional.
Tabel berikut memberikan penjelasan singkat tentang arahan yang umum digunakan -
Sr.No. | Petunjuk & Deskripsi |
---|---|
1 | ~A Diikuti oleh argumen ASCII. |
2 | ~S Diikuti oleh ekspresi S. |
3 | ~D Untuk argumen desimal. |
4 | ~B Untuk argumen biner. |
5 | ~O Untuk argumen oktal. |
6 | ~X Untuk argumen heksadesimal. |
7 | ~C Untuk argumen karakter. |
8 | ~F Untuk argumen floating-point format tetap. |
9 | ~E Argumen titik mengambang eksponensial. |
10 | ~$ Argumen dolar dan floating point. |
11 | ~% Garis baru dicetak. |
12 | ~* Argumen berikutnya diabaikan. |
13 | ~? Tipuan. Argumen berikutnya harus berupa string, dan argumen setelahnya berupa daftar. |
Contoh
Mari kita tulis ulang program yang menghitung luas lingkaran -
Buat file kode sumber baru bernama main.lisp dan ketikkan kode berikut di dalamnya.
(defun AreaOfCircle()
(terpri)
(princ "Enter Radius: ")
(setq radius (read))
(setq area (* 3.1416 radius radius))
(format t "Radius: = ~F~% Area = ~F" radius area)
)
(AreaOfCircle)
Saat Anda menjalankan kode, ia mengembalikan hasil berikut -
Enter Radius: 10.234 (STDIN Input)
Radius: = 10.234
Area = 329.03473