LISP - Giriş ve Çıkış

Ortak LISP, çok sayıda giriş-çıkış işlevi sağlar. Biçim işlevini ve çıktı için yazdırma işlevini zaten kullandık. Bu bölümde, LISP'de sağlanan en sık kullanılan giriş-çıkış işlevlerinden bazılarına bakacağız.

Giriş Fonksiyonları

Aşağıdaki tablo, LISP'nin en sık kullanılan giriş işlevlerini göstermektedir -

Sr.No. İşlev ve Açıklama
1

read& isteğe bağlı girdi akışı eof-error-p eof-value recursive-p

Giriş akışından bir Lisp nesnesinin basılı temsilini okur, karşılık gelen bir Lisp nesnesi oluşturur ve nesneyi döndürür.

2

read-preserving-whitespace& isteğe bağlı yayın içi eof-error-p eof-value recursive-p

Genişletilmiş belirteci tam olarak hangi karakterin sonlandırdığını belirlemenin istendiği bazı özel durumlarda kullanılır.

3

read-line& isteğe bağlı girdi akışı eof-error-p eof-value recursive-p

Bir satırsonu ile biten bir metin satırında okur.

4

read-char& isteğe bağlı girdi akışı eof-error-p eof-value recursive-p

Girdi akımından bir karakter alır ve onu bir karakter nesnesi olarak döndürür.

5

unread-char karakter ve isteğe bağlı giriş akışı

Giriş akışından en son okunan karakteri giriş akışının önüne koyar.

6

peek-char& isteğe bağlı gözetleme tipi girdi akışı eof-error-p eof-value recursive-p

Girdi akışından okunacak bir sonraki karakteri girdi akışından çıkarmadan döndürür.

7

listenve isteğe bağlı giriş akışı

Yüklem listen giriş akışından hemen elde edilebilen bir karakter varsa doğrudur, yoksa yanlıştır.

8

read-char-no-hang& isteğe bağlı girdi akışı eof-error-p eof-value recursive-p

Benzer read-char, ancak bir karakter almazsa, bir karakteri beklemez, hemen sıfır döndürür.

9

clear-inputve isteğe bağlı giriş akışı

Giriş akışıyla ilişkili tüm tamponlu girdileri temizler .

10

read-from-string dize ve isteğe bağlı eof-error-p eof-değeri & anahtar: başlangıç: bitiş: beyaz-boşluğu koru

Dizinin karakterlerini art arda alır ve bir LISP nesnesi oluşturur ve nesneyi döndürür. Ayrıca, duruma göre dizedeki okunmayan ilk karakterin dizinini veya dizenin uzunluğunu (veya uzunluk +1) döndürür.

11

parse-integer string & key: start: end: radix: gereksiz yere izin verilir

Start ve: end ile ayrılmış dizenin alt dizesini inceler (dizenin varsayılan başlangıcı ve sonu). Boşluk karakterlerini atlar ve ardından bir tamsayıyı ayrıştırmaya çalışır.

12

read-byte ikili giriş akışı ve isteğe bağlı eof-error-p eof-değeri

İkili giriş akışından bir bayt okur ve onu bir tamsayı biçiminde döndürür.

Klavyeden Giriş Okuma

readişlevi klavyeden giriş almak için kullanılır. Herhangi bir tartışma gerektirmeyebilir.

Örneğin, kod parçacığını düşünün -

(write ( + 15.0 (read)))

Kullanıcının STDIN Girişinden 10.2 girdiğini varsayalım,

25.2

Okuma işlevi, bir giriş akışındaki karakterleri okur ve bunları Lisp nesnelerinin temsilleri olarak ayrıştırarak yorumlar.

Misal

Main.lisp adlı yeni bir kaynak kodu dosyası oluşturun ve içine aşağıdaki kodu yazın -

; 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)

Kodu çalıştırdığınızda, aşağıdaki sonucu döndürür -

Enter Radius: 5 (STDIN Input)
Area: 78.53999

Misal

Main.lisp adında yeni bir kaynak kodu dosyası oluşturun ve içine aşağıdaki kodu yazın.

(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)
)

Kodu çalıştırdığınızda, aşağıdaki sonucu döndürür -

#\W 
#\e 
#\l 
#\c 
#\o 
#\m 
#\e 
#\Space 
#\t 
#\o 
#\Space

Çıktı Fonksiyonları

LISP'deki tüm çıktı işlevleri , çıktının gönderildiği çıktı akışı adı verilen isteğe bağlı bir bağımsız değişken alır . Belirtilmediyse veya sıfırsa, çıktı akışı varsayılan olarak * standart çıktı * değişkeninin değerine ayarlanır.

Aşağıdaki tablo, LISP'nin en sık kullanılan çıktı işlevlerini göstermektedir -

Sr.No. İşlev ve Açıklama
1

write nesne ve anahtar: akım: kaçış: radix: taban: daire: güzel: seviye: uzunluk: durum: gensym: dizi

write nesne ve anahtar: akım: kaçış: radix: taban: daire: güzel: seviye: uzunluk: durum: gensym: dizi: okunabilir: sağ kenar boşluğu: miser-genişlik: satırlar: pprint-dispatch

Her ikisi de nesneyi: stream tarafından belirtilen çıkış akışına yazar, bu da varsayılan olarak * standard-output * değerine ayarlanır. Diğer değerler varsayılan olarak yazdırma için karşılık gelen global değişkenlere ayarlanır.

2

prin1 nesne ve isteğe bağlı çıktı akışı

print nesne ve isteğe bağlı çıktı akışı

pprint nesne ve isteğe bağlı çıktı akışı

princ nesne ve isteğe bağlı çıktı akışı

Tüm bu işlevler, nesnenin basılı temsilini çıktı akışına çıkarır . Ancak, aşağıdaki farklılıklar var -

  • prin1, nesneyi değeri olarak döndürür.

  • print, nesneyi önceki satırsonu ve ardından bir boşlukla yazdırır. Nesneyi döndürür.

  • pprint, sondaki boşluğun çıkarılması dışında tıpkı print gibidir.

  • Princ, çıktının kaçış karakteri olmaması dışında aynı prin1 gibidir

3

write-to-string nesne ve anahtar : kaçış: radix: taban: daire: güzel: seviye: uzunluk: durum: gensym: dizi

write-to-string nesne ve anahtar: kaçış: radix: taban: daire: güzel: seviye: uzunluk: durum: gensym: dizi: okunabilir: sağ kenar boşluğu: miser-genişlik: satırlar: pprint-dispatch

prin1-to-string nesne

princ-to-string nesne

Nesne etkin bir şekilde yazdırılır ve çıktı karakterleri döndürülen bir dizge haline getirilir.

4

write-char karakter ve isteğe bağlı çıktı akışı

Çıktı akışına karakteri çıkarır ve karakteri döndürür.

5

write-string dize ve isteğe bağlı çıkış akışı & anahtar: başlangıç: bitiş

Bu bir Belirtilen altdizgenin karakterleri yazar dize kadar çıktı-stream.

6

write-line dize ve isteğe bağlı çıkış akışı & anahtar: başlangıç: bitiş

Yazma dizesi ile aynı şekilde çalışır, ancak daha sonra yeni bir satır çıkarır.

7

terprive isteğe bağlı çıktı akışı

Çıkış akışına yeni bir satır çıkarır .

8

fresh-lineve isteğe bağlı çıktı akışı

yalnızca akım bir satırın başlangıcında değilse bir satırsonu çıkarır.

9

finish-outputve isteğe bağlı çıktı akışı

force-outputve isteğe bağlı çıktı akışı

clear-outputve isteğe bağlı çıktı akışı

  • İşlev finish-output çıktı akışına gönderilen tüm çıktının hedefine ulaştığından emin olmaya çalışır ve ancak o zaman nil döndürür.

  • İşlev force-output herhangi bir dahili tamponun boşaltılmasını başlatır, ancak tamamlanmasını veya onaylanmasını beklemeden sıfır döndürür.

  • İşlev clear-output hedefe devam etmek için mümkün olduğunca az çıktıya izin vermek için devam etmekte olan herhangi bir bekleyen çıktı işlemini iptal etmeye çalışır.

10

write-byte tamsayı ikili çıkış akışı

Tamsayının değerini bir bayt yazar .

Misal

Main.lisp adında yeni bir kaynak kodu dosyası oluşturun ve içine aşağıdaki kodu yazın.

; 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)

Kodu çalıştırdığınızda, aşağıdaki sonucu döndürür -

Enter Number : 3456.78 (STDIN Input)
The Number: 3456.78
The Number Doubled: 6913.56

Biçimlendirilmiş Çıktı

İşlev formatgüzel biçimlendirilmiş metin üretmek için kullanılır. Aşağıdaki sözdizimine sahiptir -

format destination control-string &rest arguments

nerede,

  • hedef standart çıktıdır
  • control-string, çıktısı alınacak karakterleri ve baskı direktifini tutar.

Bir format directive yaklaşık işareti (~), virgülle ayrılmış isteğe bağlı önek parametreleri, isteğe bağlı iki nokta (:) ve at-işareti (@) değiştiricileri ve bunun ne tür bir yönerge olduğunu gösteren tek bir karakterden oluşur.

Önek parametreleri genellikle tamsayılardır ve isteğe bağlı olarak işaretli ondalık sayılar olarak belirtilir.

Aşağıdaki tablo, yaygın olarak kullanılan direktiflerin kısa açıklamasını sağlar -

Sr.No. Yönerge ve Açıklama
1

~A

Ardından ASCII bağımsız değişkenleri gelir.

2

~S

Ardından S-ifadeleri gelir.

3

~D

Ondalık argümanlar için.

4

~B

İkili argümanlar için.

5

~O

Sekizlik argümanlar için.

6

~X

Onaltılık argümanlar için.

7

~C

Karakter argümanları için.

8

~F

Sabit biçimli kayan noktalı argümanlar için.

9

~E

Üstel kayan nokta argümanları.

10

~$

Dolar ve kayan nokta argümanları.

11

~%

Yeni bir satır yazdırılır.

12

~*

Sonraki argüman yok sayılır.

13

~?

Dolaylı. Sonraki bağımsız değişken bir dizge ve ondan sonraki bağımsız değişken bir liste olmalıdır.

Misal

Bir çemberin alanını hesaplayan programı yeniden yazalım -

Main.lisp adında yeni bir kaynak kodu dosyası oluşturun ve içine aşağıdaki kodu yazın.

(defun AreaOfCircle()
   (terpri)
   (princ "Enter Radius: ")
   (setq radius (read))
   (setq area (* 3.1416 radius radius))
   (format t "Radius: = ~F~% Area = ~F" radius area)
)
(AreaOfCircle)

Kodu çalıştırdığınızda, aşağıdaki sonucu döndürür -

Enter Radius: 10.234 (STDIN Input)
Radius: = 10.234
Area = 329.03473