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 -

  • prin1 mengembalikan objek sebagai nilainya.

  • print mencetak objek dengan baris baru sebelumnya dan diikuti dengan spasi. Ini mengembalikan objek.

  • pprint sama seperti print kecuali spasi di belakangnya dihilangkan.

  • princ sama seperti prin1 kecuali bahwa outputnya tidak memiliki karakter escape

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

  • Fungsinya finish-output mencoba untuk memastikan bahwa semua output yang dikirim ke output-stream telah mencapai tujuannya, dan hanya mengembalikan nihil.

  • Fungsinya force-output memulai pengosongan buffer internal apa pun tetapi mengembalikan nol tanpa menunggu penyelesaian atau pengakuan.

  • Fungsinya clear-output mencoba untuk membatalkan setiap operasi keluaran yang sedang berlangsung untuk memungkinkan keluaran sesedikit mungkin untuk melanjutkan ke tujuan.

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