CEYD-A ile Komplike Kurgular

CEYD-A kurgularını, içinde kod parçacıkları olan hücreler olarak tanımlayabiliriz. Çoğu birbirleriyle etkileşim halinde olan yüz binlerce kurgu bulunmakta. Bu yazımızda komplike kurgu olarak nitelendirebileceğimiz örnekler sunacağız.

Kullanıcıların oluşturduğu kurgular onaylandıktan sonra tüm CEYD-A uygulamaları bu kurguları kendi bünyesine almaktadır. Onaylanmayan kurgular ise sadece kullanıcının uygulamasında devreye girecektir. Kurguları https://ceyd-a.net/kodyaz adresinden tanımlayabilirsiniz. Aşağıda örnekleri verilmiş kurgular, onaylanmış kurgulardır. Benzerlerine örnek olması adına bu yazımızda sunulmuştur.

Daha önceki yazılarımızda da belirtildiği gibi kurguları ister blok geliştirme ile ister CEYD kodu desteği ile oluşturmak mümkündür.

Öz yinelemeli (Recursive) kurgular

ertesi gün kurgusu CEYD kodu

İç içe çağrılan kurgu, bir kurgunun içinde başka bir kurgunun çağrılabilmesidir. Öz yinelemeli kurgu ise kurgunun içinde aynı kurgunun tekrardan çağrılabilmesi başka değişle kendi kendini çağıran kurgu olabilmesidir. CEYD-A her iki çağırma yapısını desteklemektedir.

CEYD-A’ ya rakip uygulamalar, sahibi olduğu firmalarının kendi sunucuları üzerinde çalıştıklarından dolayı geliştiricilerin kaynak kullanımı istismarı riskini engelleyebilmek için bu yapıları desteklemeyebilir. Ancak CEYD-A yapısı geliştiricinin kendi cihazında çalıştığı için kontrol geliştiricinin insiyatifine bırakılmıştır. Bu şekilde düşünürsek CEYD-A’nın bu yapıları desteklemesi daha uygundur.

Örneğimizde ertesi gün sorusuna ait kurgu, eğer sorunun baş kısmında başka bir ertesi günü ifadesi içeriyorsa kendi kendini çağırmaktadır. Önce sorunun baş kısmı yeni bir kurgu gibi işlenmekte dönen değer kurgu içinde tekrar değerlendirilmektedir. Sorunun içinde ertesi gün ifadesi kalmayana kadar çağırma işlemi devam etmekte ve cmdnextday (TARİH) komutu çalıştırılarak kuyrukta bekleyen tüm ertesi gün kurguları peş peşe bu kurguyu çağırmaktadır.

CEYD-A, sonsuz bir döngü içinde bir kurgunun peş peşe çağrılmasına izin vermemek için bir limit tanımlamıştır. O limit geçilmedikçe bir soru içinde aynı ifadeleri arda arda sorup tek cümle içinde çok sayıda aynı kurguyu çağırabilmek mümkündür.

Komut kodlarının içeriğini daha detaylı incelemek isteyenler için ertesi gün kurgusunda kullanılan cmdnextday komutunun CEYD kodu aşağıdadır. Bu şekliyle cmdnextday iç içe çağrılan komuttur.

Soy ilişkilerinin hesabı yapay zeka derslerinin her zaman konusu olmuştur. Neyim olur kurgusu oluşturarak bir örnek daha yapalım. Amaç aynı cümle içinde çok sayıda ardışık aile ilişkisi söyleyerek son söylenen ilişkideki kişinin sizinle olan birebir ilişkisini tespit etmek olacak.

İki adet neyim olur kurgumuz olacak. İlkinin soru katsayısı küçük bir değer (örnekte 1.2), ikincisinin katsayısı ise büyük bir değer olmalı (örnekte 25). İçinde neyim olur geçen cümle kurulduğunda önce katsayısı yüksek olan ikinci kurgu denenecek eğer şablon uymuyorsa ilk kurgu devreye girecek.
Kurguların birbirinden farkları şablonlarının farklı olması. İkinci kurgu hesaplamaya odaklanırken, katsayısı düşük olan ilk kurgu, eğer ikinci kurgu cevap dönmez ise parametre ne ise onu dönecek. Örnek babam benim neyim olur için baba, oğlum benim neyim olur için oğlu gibi.

Aşağıdaki ikinci kurgu hesaplamaya odaklı demiştik. Şablon olarak 2 adet ilişkiyi parametreler olarak almaktadır. Örneğin babamın babası benim neyim olur dediğimizde babamın ilk parametre, babası ikinci parametredir.
Cevap değişkenine babamın benim neyim olur kurgusunun cevabı atanacaktır. Sonrasında ilk kurgu devreye girecek ve cevap değişkeni babamın olacaktır. Cevap değişkeni boş bir değer olmadığı için babamın (cevap değişkeni) babası (2.parametre) aşağıda örnekleri verilen eşleşme kurgularından şablonu uygun olan baba kurgusu büyükbaba değeri dönecektir.

Başka bir benzer örnekte Büyükbabamın eşi benim neyim olur dediğimizde büyükbabam ilk parametre, eşi ikinci parametredir.

Eşleşme kurguları aşağıdadır. Daha komplike bir örnek verirsek kardeşimin babasının babasının eşi benim neyim olur dediğimizde, ikinci neyim olur kurgusu ilk parametreyi kardeşimin babasının babasının ikinci parametreyi eşi olarak işleyecektir. Özyinelemeli olarak kardeşimin babasının babasının benim neyim olur çalıştıracak, ikinci kurgu kardeşimin babasının ilk parametre olarak, babasının ikinci parametre olarak devreye girecektir. Bir sonraki aşamada ise kardeşimin babasının benim neyim olur cümlesini ilk kurgu cevaplayacak ve baba değeri dönecek. Kuyrukta cevap bekleyen kurgulara baba babasının eşi neyim olur dönecek, sonraki aşamada baba babasının eşlemesi büyükbaba dönecek, daha sonra büyükbaba eşi neyim olur devreye girecek ve babaaanne sonucu ile tüm çağrılar sonuçlanacaktır.

Eşleme kurguları

Eşleme kurgusu: kardeş , (çocuğu,oğlu,kızı) -> yeğen


Başka bir örnek sayısal oyna kurgusudur.  1 ile 50 arası rastgele bir sayı oluşturmakta ve bu değeri $r değişkeninde tutmaktadır. Her tutulan değer ayrıca $rnd,$rnd_1,$rnd_1_1,$rnd_1_1_1,$rnd_1_1_1_1 ve ,$rnd_1_1_1_1_1 değişkenlerinde tutulmaktadır. Değişken isimlerinin bu şekilde olmasının nedeni her yinelemeli çağrıda sayısal oyna {HER}_1 olarak parametrenin sonuna _1 eki parametre gönderilmiştir. Eğer yukarıdaki $rnd değişkenleri farklı değer içermiyorsa bulana kadar yinelemeli çağrılar devam etmektedir. Eğer bulunan rastgele değer $rnd değişkenlerinin hiçbirinde yok ise değişkenlere bu rastgele değer atanmaktadır.

Kurguyu denediğimizde CEYD-A’ dan aldığımız sonuçlar aşağıdaki gibidir.

Döngü içeren kurgular

Komplike olarak nitelendirebileceğimiz kurgu yapılarından bir başkası da FOR döngüsüdür. Örnekteki haber bülteni kurgusunda haber RSS sayfasından haber içeriklerini gösteren summary etiketinin içerikleri cmdfetchtaghtml komutu ile $fetchtagrows dizisine aktarılmakta, döngü içinde mod alma ile tek veya çift (0 veya 1) değere göre ses tonu değiştirilerek dizinin döngü içindeki indeksi seslendirilmektedir. Bu şekilde haber bültenini 2 farklı spiker seslendiriyor havası verilmektedir.


 

Bir diğer örnekte deprem verileri siteden satır satır alınmakta. Satır içindeki şiddet (magnitude), tarih bilgisi (datetime) ve yer (location) bilgileri tespit edilmekte ve magnitude değeri cmdshowquakes kurgusundaki parametreden daha fazla ise bu bilgiler gösterilmektedir. depremler kurgusu ise cmdshowquakes kurgusunu çağırmakta ve şablonda tespit edilen sayı değerini parametre olarak göndermektedir.

İstenilen alanları satırdan tespit eden regex ifadesi

 

Örnekleri denediğimizde aşağıdaki sonuçları CEYD-A uygulamasından almaktayız. Çok sayıda veri satırı olduğu için FOR döngüsü işlemi bekleme süresi sonrasında değerleri dönecektir. CEYD dili cihaz üzerinde çalıştığı için cihazın işlemci gücüne göre işlem süresi değişiklik göstermektedir.

Yazı hazırlandığı tarihte gündemde olan Elazığ depreminde hayatını kaybedenlere başsağlığı, yaralılara da acil şifalar dilerim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.