Commodore sayı 45, sayfa 60

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 60

Önemli Bir Sorun

LISP sembol manipülasyonuna yönelik bir bilgisayar dilidir. Alfanümerik karakterler gösterebilmek gibi bir yan özelliği vardır ve bu dille birisi bir arcade oyunu yazabilir ama asıl özelliği büyük veri akışlarını iş-

Gövdeler

LISP, Basic'ten yeni yapay zeka dilleri tarafından kullanılan bu bir dizi yüklem üzerine kurulmuş olmasıyla da ayrılır: (RENKLER (KIRMIZI BEYAZ MAVİ)) LISP bunların yazılması durumunda verdiğimiz veriyi aynen yazacaktır, ama tırnak işaretini kaldırırsanız LISP yorumcusu TANIMLANMAMIŞ hata mesajını verecektir. Değişkene SETQ denilen bir komutu kullanarak bir ad verebilirsiniz, bu değişkene BASIC dilindeki LET emri (statement) gibi bir değer verir.

SETO RENKLER '(KIRMIZI BEYAZ MAVİ)

Görüldüğü gibi, değişkende depolanan değer, ya bir tırnak işaretini izleyen bir ifade ya da bir LISP fonksiyonuna referans olabilir. (Bu BASIC'te bir “komut” ya da “anahtar sözcük” olarak bilinir.) Değişkenin adını tırnak işareti olmadan girersiniz. SETQ emrinin verdiği değer oluşturulacaktır. Aynı microPROLOG'ta olduğu gibi, LISP programlama yöntemlerimize tamamıyla yeni bir yaklaşım getiriyor. Bu anlamda LISP ve microPROLOG arasında birçok benzerlik var, bu benzerlik dilin kendisini oluşturması sürecine kadar uzanıyor ama akış şeması kavramını programcılık ideolojimize aşıladığı “birbirini izleyen akış” düşüncesinden uzaklaşmamız gerekiyor. Bu yaklaşım BASIC, COMAL gibi dillerde hâlâ devam ediyor. Bir informasyon listesini düşünün? Onda en sonuncusu dışında birbirini izleyen bir dizi veri olur. LISP listeleri uzunluklarından bağımsız olarak aynı şekilde ele alınabilecek bir nesneler grubu olarak görmek yanlıştır. Listelerin bir seferde bir öğe aşılarak katedilebileceği düşüncesi son derece yararlı oluyor. Bunun yanısıra LISP tanımlayıcı ve rakamların listelere serbestçe karışmasına da olanak veriyor. Her şeyi pointer'larla halledebilmenin bir yolu bu. Listelere gelince, bu pointer'lar tek bir veri birimini saptayacaktır. Buna hücre denir ve her yarısı başka bir pointer içermektedir. Soldaki pointer (hücredeki ilk olan) depolanmış listedeki ilk öğeye götürür, sağdaki de geriye kalanı işaret eder. Böylece (A listesi için tablo şekil 1'de görülebilir. Böyle listeler alt listeler halinde düzenlenebilir ya da derinlemesine düşey olarak tasarlanabilir. Bunu şekil 2'de görebilirsiniz. Herhalde şimdiye kadar LISP'in neden bu kadar iyi bir genel amaçlı database oluşturma dili olduğu anlaşılmıştır. Çünkü bir database'te içkin olan tüm fonksiyonlar ve data yapıları yapısında mevcuttur.

Testler ve Karşılaştırmalar Bir fonksiyonu, tek bir çağırma ile, yapılaştırılmış informasyonun inşa edilebileceği, depolanabileceği ya da alınabileceği şekilde tanımlayabilmek

LISP'in genel bir özelliğidir. Dahası, bazı insanların “zeka” dediğini kullanma yeteneğine sahip fonksiyonlar yazılabildikten, yani bir fonksiyondan çıkan datayı tartışıp o bulgulara göre sonra ne yapılacağı konusunda karar verebilen bir işlem olduktan sonra çok daha ilginç programlar yazılabilir. Diğer bir deyişle, LISP veriler üzerinde testler ve aralarında karşılaştırmalar yapmaya ihtiyaç duyar. En yaygın testler olan EQ, ATOM ve NULL Boolean nicelikleri “doğru” ve “yanlışı” veren değerler çıkartır. Acornsoft LISP'te, NIL “yanlışı” temsil eder. Onun yanısıra, bir data yapısı diyagramının sonunda bulunan boş listeyi de temsil eder. “Doğru” bir fonksiyondan gelen datanın “yanlış” olmadığı her durum sayılmaktadır. Bu nedenle T sözcüğünü bu niceliği tescil etmek üzere kullanabiliriz. (Aynı şekilde F de yanlışı temsil edebilir.) “Doğru” değerler verdikleri düşünülen LISP fonksiyonları predicate (yüklem) olarak bilinir. Ama kullanım alanları, COND, özel fonksiyonunu kullanarak oluşturulan conditional (koşullu) ifadelerle birliktedir. Bu çeşit ifadelerin genel ifadesi şöyledir: (COND (yüklem 1 ifade 1) (yüklem 2 ifade 2))

Şekil 1: LISP data yapı diyagramı

Klavyeyle gezinmek için ← ve → tuşları.