LISP - Paketler
Genel anlamda programlama dilleri terimi, bir dizi adı diğerinden ayrı tutmanın bir yolunu sağlamak için tasarlanmıştır. Bir pakette beyan edilen semboller, başka bir pakette beyan edilen aynı sembollerle çatışmayacaktır. Bu şekilde paketler, bağımsız kod modülleri arasındaki adlandırma çakışmalarını azaltır.
LISP okuyucu, bulduğu tüm sembollerin bir tablosunu tutar. Yeni bir karakter dizisi bulduğunda, yeni bir sembol oluşturur ve sembol tablosunda depolar. Bu tabloya paket denir.
Mevcut paket, * paket * özel değişkeni ile belirtilir.
LISP'de önceden tanımlanmış iki paket vardır -
common-lisp - tanımlanan tüm fonksiyonlar ve değişkenler için semboller içerir.
common-lisp-user- Common-lisp paketini ve diğer tüm paketleri düzenleme ve hata ayıklama araçlarıyla kullanır; kısaca cl-user denir
LISP'de Paket İşlevleri
Aşağıdaki tablo, paketleri oluşturmak, kullanmak ve işlemek için en sık kullanılan işlevleri göstermektedir -
Sr.No. | İşlev ve Açıklama |
---|---|
1 | make-package paket adı ve anahtar: takma adlar: kullanım Belirtilen paket adıyla yeni bir paket oluşturur ve döndürür. |
2 | in-package paket adı ve anahtar: takma adlar: kullanım Paketi güncel hale getirir. |
3 | in-package isim Bu makro, * paketin * 'in bir sembol veya dize olması gereken paket adı olarak ayarlanmasına neden olur. |
4 | find-package isim Bir paket arar. Bu isim veya rumuz ile paket iade edilir; böyle bir paket yoksa, bul-paketi nil döndürür. |
5 | rename-package paket yeni adı ve isteğe bağlı yeni takma adlar bir paketi yeniden adlandırır. |
6 | list-all-packages Bu işlev, Lisp sisteminde mevcut olan tüm paketlerin bir listesini döndürür. |
7 | delete-package paket Bir paketi siler. |
Bir LISP Paketi Oluşturma
defpackageişlevi, kullanıcı tanımlı bir paket oluşturmak için kullanılır. Aşağıdaki sözdizimine sahiptir -
(defpackage :package-name
(:use :common-lisp ...)
(:export :symbol1 :symbol2 ...)
)
Nerede,
paket-adı, paketin adıdır.
: Use anahtar sözcüğü, bu paketin ihtiyaç duyduğu paketleri, yani bu paketteki kod tarafından kullanılan işlevleri tanımlayan paketleri belirtir.
: Export anahtar sözcüğü, bu pakette harici olan sembolleri belirtir.
make-packageişlevi ayrıca bir paket oluşturmak için kullanılır. Bu işlevin sözdizimi -
make-package package-name &key :nicknames :use
Argümanlar ve anahtar sözcükler öncekiyle aynı anlama sahiptir.
Bir Paketin Kullanılması
Bir paket oluşturduğunuzda, bu paketteki kodu mevcut paket yaparak kullanabilirsiniz. in-package makrosu, bir paketi ortamda güncel hale getirir.
Misal
Main.lisp adlı yeni bir kaynak kod dosyası oluşturun ve içine aşağıdaki kodu yazın.
(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello ()
(write-line "Hello! This is Tom's Tutorials Point")
)
(hello)
(in-package dick)
(defun hello ()
(write-line "Hello! This is Dick's Tutorials Point")
)
(hello)
(in-package harry)
(defun hello ()
(write-line "Hello! This is Harry's Tutorials Point")
)
(hello)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
Kodu çalıştırdığınızda, aşağıdaki sonucu döndürür -
Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point
Bir Paketi Silme
delete-packagemakrosu bir paketi silmenizi sağlar. Aşağıdaki örnek bunu göstermektedir -
Misal
Main.lisp adlı yeni bir kaynak kod dosyası oluşturun ve içine aşağıdaki kodu yazın.
(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello ()
(write-line "Hello! This is Tom's Tutorials Point")
)
(in-package dick)
(defun hello ()
(write-line "Hello! This is Dick's Tutorials Point")
)
(in-package harry)
(defun hello ()
(write-line "Hello! This is Harry's Tutorials Point")
)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
(delete-package tom)
(in-package tom)
(hello)
Kodu çalıştırdığınızda, aşağıdaki sonucu döndürür -
Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point
*** - EVAL: variable TOM has no value