Bu sayfadaki yazılar
Sayfanın metni
Sayfa 10
BASIC
READY. 100 REM VERİ KAYITLARI 110 DIM AS(8),B$(8) 120 FOR 1-1 TO 8:READ 130 DATA “AD”, “SOYAD”, “DTARIH”, “SOKAK”, “SEMT”, “SEHİR”, 140'PRİNT TAB(10); :PRİNT TAB(10);
1 TO 8:PRİNT
150 FOR | BS0): NEXT READY.
Kısa ama karışık: BASIC'de veri soruşturması.
BR Logo
TO S :X :ORD REPEAD 4 ICIZ :X :ORD SAGA END END
TO CIZ :X :ORD IF :ORD — 1 THEN FORM :X STOP CIZ :X :ORD — 1 SAGA :X CIZ :X :ORD — 1 SOLA :X CIZ :X :ORD — 1 SAGA :X CIZ :X: ORD — 1 END
TO FORM :X REPEAT 2 :X LEFT 45) FORWARD :X END
TO SOLA :X LEFT 45 FORWARD :X LEFT 45 END
TO SAGA :X RIGHT 90 FORWARD :X RIGHT 90 END
ilişkin LOGO programı dört adet alt-rutine (SAGA, SOLA, FORM, CIZ) ve bir adet ana yordama sahip (5).
PASCAL
program dosya; type tarih - record gün: ay: yıl: end; adres - record ad: soyad: dogum: yer: semt: sokak: case denk: true: false; end; var düzeltici: adres; sahte; stringl801; begin writeln ( writeln ( with duzeltici do begin write (ad.....
(ad);
1..12, 1890..2000;
stringl801; stringl801; tarih; 1000..8999; stringl801; stringl801; boolean of (geçici: real);
bilgi girisi
Buna tekabül eden Pascal programının uzun olduğu açık, ama ilk bakışta kavranması da çok daha kolay.
başvurmuş olana gerekli bilgiyi veriyor, bu bilgiyi alan da kendi tanıdığına bunu aktarıyor, o da öbürüne, tâ ki dostunuzun sormuş olduğu şey kendisine ulaşıncaya kadar. Recursion mekanizması en basit durumda böyle işlemektedir. Ama örneğin bir kitabın çözümlenmesi söz konusu olduğunda karmaşık durumlar ortaya çıkabiliyor. Kitap önce bölümlere, bölümler cümlelere, her bir cümle dil bilgisel kategorilere, her kategori alt-kategorilere, her alt kategori kelimelere, her kelime hecelere ve her hece de harflere ayrıştırılıyor. Ayrıştırma süreçlerinin hepsi birbirine benzemektedir. Ama bir ayrıştırma işlemi her zaman ânında tamamlanmamakta, muhtemelen de bir sonraki evrenin çözümlenmesine bağımlı kalmaktadır. LOGO'nun somut diline çevrildiğinde bunun anlamı şudur: En basit rekürsif fonksiyon -belki de okul dönemlerinden hatırlayacağınız- faktöriyel işlemdir. Bu işlem, sayının ardından gelen bir ünlem işaretiyle ifade edilmektedir: 3!=1x2x3=6. Ancak, rekürsif olarak bu fonksiyon şöyle tanımlanmaktadır: N sayısının faktöriyeli, ilkin N-1'in bulunması ve bunun da N sayısı ile çarpılması yoluyla hesaplanmaktadır. Bunun içinse tabii önce (N-1)! sayısının bilinmesi gerekmektedir ki, bu da (N-2)'den çıkarılmaktadır... vb. Ta ki 1'e ulaşıncaya kadar. Çünkü matematikçiler 1'in faktöriyel değerinin 1 olduğunu saptamışlardır: 1!=1. LOGO'da ise bu şöyle ifade edilmektedir: TO FAK :N IF :N=1 THEN OUTPUT 1 STOP ELSE OUTPUT :N * FAK (:N-1) Bu formülü şöyle açıklayabiliriz: Burada “N” N'in değeridir. “OUTPUT” ise bir şeyin geri verileceğini göstermektedir. Çünkü her LOGO yordamı tek bir görevi yerine getirir. Bu görevi dolaysız olarak yerine getiremediği takdirde, komutu bir alt programa iletir. Bu alt-program söz konusu komutun yordam tanımını temin eder ve sorunu çözmeye çalışır. Eğer başarılı olamazsa, o da tıpkı bir önceki gibi yaparak komutu bir alt-alt programa aktarır. Bu işlem, komut vericilerinden biri istediği sonucu alıncaya kadar böylece sürüp gider. Bu durumda sonuç bir önceki komut vericiye iletilir (OUTPUT talimatı aracılığıyla). Bu da bir kez daha görevini yerine getirmeyi dener.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 11
Bunda başarılı olduğu takdirde, elde ettiği sonucu kendi komut vericisine (yukarıya) aktarır... vb. En sonunda ise, eğer bütün komut vericiler kendi görevlerini yapmışlarsa, LOGO basıma geçebilmektedir. Bu anlatılanlar karmaşık mı geliyor size? Öyle olsa da, kaygılanmanıza gerek yok. Çünkü “recursion” veri işlemin en tuhaf ve güç anlaşılır kavramlarından biridir. Bilgisayarın bütün hesap işlemlerine saydam bir şekilde ışık tutacak basit bir örnekle konuya açıklık getirmeye çalışalım: Örneğin, 3 sayısının faktöriyelini hesapladığımızı düşünelim. Bu durumda LOGO ilkin N=1 olup olmadığını sorar. Yanıt olumsuzdur. O zaman yordam (buna “1” diyelim) 3 değerini kaydeder ve bir alt-yordamı 3 faktöriyelini bulmakla görevlendirir. “2” olarak adlandıracağınız yordam ise N=1 olup olmadığını yoklar; yanıt olumsuzdur ve yordam “2” bu defa 2 değerini kaydederken bir alt-alt-yordamı 2-1=1'in faktöriyelini bulmakla görevlendirir. “3”te N'in değerinin 1 olup olmadığını sorar; yanıt olumludur. Bu durumda yordam “3” büyük bir gururla yordam sonucunu aktarır. Şimdi yordamın kullanabileceği bir değeri vardır ve bunu 1x2=2 şeklinde kullanır. Bu sonuç ilk komut vericiye iletilir ve böylece o da tıpkı bir önceki gibi işlem yapabilecek bir değer edinmiş olurken bu (2) değerini kendi değeri olan (3) ile çarparak 6 sayısını bulur. Buysa, görüldüğü gibi, 3 sayısının faktöriyelidir: 3! Şimdi artık önemli olanın ne olduğunu herhalde daha iyi anlaşılmaktadır: Sorun bizzat çözülemediğinde, görevi bir başkasına aktarmak. Bunun temelinde yatan ilkeyi “gecikmeli uygulama” olarak nitelendirmek mümkündür. Burada bütün ara değerler ve ara formüller depolanmak zorundadır ve bundan ötürü de rekürsif diller çok fazla bellek hacmi gerektirirler. LISP'in, ev ya da kişisel bilgisayarlarda bu denli ender görülmesinin nedenlerinden biri de budur. Ama depolama konusunda programcının kaygıya kapılmasına hiç gerek yoktur; çünkü bütün bunları LOGO-çeviricisi üstlenmiştir. Recursion'un ardında yatan ilke grafik olarak pek güzel gösterilebilir -“çocuk” dili LOGO'nun eğitsel yönden taşıdığı büyük değerin kaynağını da burada aramak gerekir. Bir örnek daha verelim: Geçen yüzyılın sonlarına doğru bazı matematikçiler son derece garip görünümlü birtakım eğriler keşfettiler. Bu eğrilere akademik çevrelerce “patalojik” damgası vuruldu. Çünkü bunlar, eğrilere ilişkin peşin yargıları altüst etmişlerdi. Söz konusu “hastalıklı” eğriler bulundukları yüzeyi en sonunda baştan başa kaplıyorlardı; çünkü çok sık bir dallanma sürecine giriyorlardı. Öyle ki, her alt dal, dallanma sırasında yeni bir alt dal ve bu da başka bir alt dal... vb. oluşturuyordu. Tıpkı recursion'da olduğu gibi. Bu yeni oluşumlar hiç de salt birtakım oyunlar sonucunda ortaya çıkmış değillerdi; birçok alana yeni bilgiler kazandıran ve olağanüstü bilgisayar grafiklerine imkân veren bir bilimin gelişmesi bu eğriler sayesinde olmuştur. Biz bu eğrilerden biri üzerinde çalışmaya başladık (“Sierpinski-eğrisi”, adını bulucusundan almıştı). Eğriyi LOGO dilinde göstermeye uğraşıyorduk. Ben bir gün sonrasında sinirlerim harap olmuş bir durumda bu işten vazgeçerken, meslektaşım Lehmann, çalışmasını yılmadan sürdürdü ve rekürsif hilelere karşı yürüttüğü toplam 24 saatlik bir mücadele sonucunda basit görünümlü bir program yapmayı başardı. Gerçekten de, LOGO'nun temel sözlük dağarcığına egemen olan herkes bu programı (anlamasa bile) “okuyabilirdi”. Ama kendi düşüncesi hakkında da düşünebilmek, insan zekâsının bir özelliği. Yapay zekâ dilleri bu özelliği Recursion aracılığıyla taklit eder.
Planlanır ve denenirse bu görünüm çıkıyor ortaya.
aynı program BASIC'de öylesine kapsamlı ve bir bakışta anlaşılması öylesine zordu ki, burada bunun dökümünü yapmaktan kaçınmak zorunda kaldık.
Ayrıca, Pascal ile LOGO arasında bir karşılaştırma yapmaktan da çekindik. Çünkü LOGO'nun tipik grafik yetenekleri Pascal'da ya hiç yoktu, ya da aynı şekilde mevcuttu. Bu durum versiyona bağlı olarak değişiklik gösteriyordu. Bu dilin ilk taslağında hiçbir grafik imkânı öngörülmemiştir. Bütün bu anlatılanlardan sonra, sizin için hangi dilin en uygun dil olduğuna bilmem karar verebildiniz mi? Eğer veremediyseniz cesaretiniz kırılmasın. En iyisi, kişinin bunu bizzat denemesi ve mizacına en uygun düşen dili sonunda kendi kendisinin seçmesidir. Programlama dillerinin seçimiyle araba ya da bilgisayar seçimi arasında pek fazla bir fark yoktur.