recurring eventlara basladik, ilk is cumlelerin ortak ozelliklerini ve ayirt edici farklarini bulmak. recurring eventlar yani tekrarli olaylar asagidaki sekillerde girilebilir diye dusunuyorum: 1. haftada bir toplanti var. 2. gunde bir toplanti var. 3. her gun toplanti var 4. her hafta toplanti var 5. iki haftada bir toplanti var. 6. iki gunde bir toplanti var. 7. gun asiri toplanti var. dolayisiyla iki kalip ortaya cikiyor. 1. da bir 2. her bir de bunlarin zenginlestirilmesi soz konusu, mesela 1. haftada bir 10:45 de aliyle okulda toplanti var. 2. her hafta 10da veliyle cananda iki saatlik toplanti var. ve bunlarin kombinasyonlari mumkun. sorun: bu toplantilarin recurringlerinin (tekrarlarinin) baslangic ve bitislerini alacak miyiz? mesela bugunden itibaren haftada bir aliyle velide ikiser saatlik toplantilar var. (aklima gelmisken not iki saatlik yerine ikiser saatlik kavraminin calismasi da gerkiyor kontrol et, toplanti yerine toplnatilar olmasi lazim cogul olacak bunun semantiginin toplanti donmesi gerekir kontrol et). peki bu durumda tekrarlarin baslamasi ve bitmesini almak zor olabilir. oncelikli hedefimiz sonsuz tekrarlilari almak olsun, sonlulari daha sonra ekleriz. (cok zor olacagini dusunmuyorum syntax ve morfolojide biraz akrobasiyle halledilir ama bunun icin iskeleti olusturan sonsuzlari halledelim once) sorun: tekrarli toplantilari nasil tutacagiz? sun anki semantik gosterimlerde 11 alan var: takvim(dakika,saat,gun,ay,yil,kiminle,nerede,konu,durationtime,durationunit). son iki alani yazmistim ancak bilgisayar goctugunde ucmus galiba bulamadim en iyisi bastan yazmak. iki cözüm görülüyor, ya yeni bir field ekliyeceğiz (ki zannediyorum kodun her yerinin değismesi oldukça acı verici olur) yada zamanları tuttuğumuz gibi ayıraçlar ile halledeceğiz (hatırlatma,zamanaltı, za-10-45 semantik gösterimi zamanaltı 10:45 demek oluyor) ikinci çözüm daha olası görülüyor, duration kısmı iki alan kaplıyor, bunlardan ilkini duration kullanmaya devam etsin (tabi ayıraç kullanarak) ikincisi de tekrarlı olayları tutsun. böylece sadece duration kısmını tutan kod değişecek. Unutma: teze başlarken bir hatırlatma mekanizması ve randevuların çakışmalarını önleyici bir mekanizmadan bahsediyorduk (ki henüz bunlar yok), recurring eventların da bu mekanizmaların hesaplamasına uygun birer gösterimi olması gerekir. karar: her ne olursa olsun recurring eventlar alttan ve ustten sinirli olacaklar (yani haftaya haftada bir toplanti var) dedigim zaman bugunden basliyarak 10 haftaya koyacak. 10.2.2003e kadar haftada bir toplanti var 10.2.2003ten 10.8.2003 e kadar haftada bir toplanti var on kez haftada bir toplanti var 10.2.2003ten itibaren 10 hafta haftada bir toplanti var 10.2.2003ten itibaren 10 kere haftada bir toplanti var ve bu cumle yapilarinin zenginlesmesi soz konusu: 10.2.2003e kadar haftada bir aliyle cannada toplanti var 10.2.2003ten 10.8.2003e kadar haftada bir aliyle okulda toplanti var on kez haftada bir aliyle toplanti var seklinde ok kodlamaya basladim, haftada bir yilda bir gunde bir ayda bir toplanti var cumleleri calisiyor her hafta toplanti var cumlesi calismiyordu(konu algilayip, konu kismini her hafta toplanti yaziyordu) sorun konu olmadigini anlatamamaktan kaynaklaniyordu, konudegil(X):-loc(R,[X],[]). satiri calismaz cunki bizim recurringler en az iki kelime bu ise tek kelime avliyor. konudegil(X):-tmorp(X,timeunit,_,_).%timeunitten konu olmaz satiri cozum oldu peki bu durumda konu kismina ay,yil gun gibi seyler yazamiyacak miyiz? ben aylik degerlendirme toplantisi yazmayi denedim, calisiyor. dusundum ve karar verdim ki recurring eventlarin hepsi madem sonlu olacak, o zaman bende bu sonlu sayidaki seti acarim, yani on toplanti olacaksa bundan sonra, bende on kayit eklerim tarihlerini hesaplatir yazarim, aslinda bu konunun nasil cozuldugunu ogrenmek onemli databasede recurring eventlar nasil tutulmali? outlook ne yapiyor acaba? tamam gun arttir eski versionmus, sadece gun arttiriyor, ay yil arttirma islemlerini ya yapmiyor ya da ben nasil yapildigini unuttum. ayrica su zamanulari timeunit yapinca zamanalti ve zamanustu birbirine girdi, o yuzden zaman altini relatif yapan (ki saat ve dakika sadece buralarda kullaniliyor) kelimelerin semantik filitresini frozen olarak kodladim. anlarecurring'i cozmek icin zannediyorum, sem3u anlarecurring2'ye gecirip zaman birimi kadar arttira arttira (tekrarida azalata azalta) file'a yazmamiz yeterli olacak tabi bunun icin saglam bir gun arttira ihtiyacimiz var (benim baktigim kadariyla ay sonlarinda sisiyordu) tamam sorunu buldum, zannediyorum elim yanlislikla dokunmus yil arttiran kisimdaki J variableini kucultmusum. (kodla oynamak giderek riskli olmaya basliyor) ----------------------------------------------------------------- recurring eventlar icin olasi cumleleri cikartma islemi microsoft outlook ile yapila bilen islemlerin turkce karsılıklari toplantılar günlük, aylık, yıllık, yada haftalık olabilirler:: günlük toplantılar: *her gün her iki günde bir her n günde bir *her hafta içi gün (bu aslında haftalık dursa da günlük galiba) haftalık toplantılar: *her salı her X *her 2 haftada bir salı her n haftada bir X *her hafta (bu yok ben ekledim her hafta bugün demek olsun) aylık toplantılar: ayda bir üçüncü gün her ayın üçüncü günü (bu daha mantılı oldu) her iki ayda bir üçüncü günlerde her n ayda bir Nnci gün her ayın ilk pazartesisi her N ayda bir Ninci Xleri --------Assumption: her iki ayda bir toplanti var deniliyorsa bunu her ayin ninci gunu kabul ediyorum yıllık toplantılar: her martın üçünde her yıl martın üçünde her üç martta her martın ilk pazartesi her Xin Ninci Ysi (buradan ilk ile birinci kelimelerinin semantik olarak eşit olması gerektiği cıkar) bu yapıların dışında başlangıç ve bitiş tarihleri gerekiyor. Kabul: Başlangıç tarihi bu günden önce olmasın! başlangıç tarihi ileride bir tarih olabilir. o halde zaman üstü tarihleri alır gibi başlangıç tarihlerini alabiliriz. onunda on ocakta on on ikibinde on gün sonra iki ay sonra ... bitiş tarihlerini nasıl alabiliriz? bunlarda yapı olarak zaman üstü özelliği gösteriyor. ama ismin -de hali deği -e halinde oluyorlar ve kadar kelimesi ekleniyor onuna kadar on ocağa kadar on on ikibine kadar on gün sonrasina kadar (bu biraz zor olacak) iki ay sonrasına kadar (sonrası biraz zorlayacak) ... bu yapıların sışında başlangıç ve bitiş tarihleri gerekiyor. Kabul: Başlangıç tarihi bu günden önce olmasın! başlangıç tarihi ileride bir tarih olabilir. o halde zaman üstü tarihleri alır gibi başlangıç tarihlerini alabiliriz. onunda on ocakta on on ikibinde on gün sonra iki ay sonra ... ayrıca ismin -den halide kabul edilmeli: onundan on ocaktan on on ikibinden on gün sonrasından ... bitiş tarihlerini nasıl alabiliriz? bunlarda yapı olarak zaman üstü özelliği gösteriyor. ama ismin -de hali deği -e halinde oluyorlar ve kadar kelimesi ekleniyor onuna kadar on ocağa kadar on on ikibine kadar on gün sonrasina kadar (bu biraz zor olacak) iki ay sonrasına kadar (sonrası biraz zorlayacak) ... o halde ornek cümlelerimiz yukarıdaki üç bölümün permutasyonları şeklinde çıkar (tabi arada anlamsız cümleler olabilir, ama daha önceden söylediğimiz gibi, şayet anlamlıların hepsini kabul edebiliyorsak, karşı taraf türkçe için anlamsız bizim için anlamlı birşeyler girdiğinde bizim anlamamız sorun çıkartmaz) örnek tekrarlı cümleler: yukarıdaki bölümleri başlangıç, tekrar ve bitiş şeklinde isimlendiriyorum bunların olmaması durumu da mümkün(tekrarın olmaması mümkün değil, o zaman tekrarlı cümle olmaz); o halde aşagıdaki yapılar çıkar tekrar (bu durumda başlangıç bugün kabul edilir, olay hiç bitmez) başlangıç tekrar (bu durumda hiç bitmiyoruz, bu yukarıdakinin aynısı ama sağlıklı mı örneklere bakacağız) tekrar başlangıç (bu durumda hiç bitmiyoruz) bitiş tekrar (bu durumda başlangıç bugün kabul edilir) tekrar bitiş (bu yukarıdakinin aynısı ama sağlıklı mı örneklere bakacağız) başlangıç tekrar bitiş bitiş tekrar başlangıç başlangıç bitiş tekrar tekrar başlangıç bitiş (bunlardan mantıksız olanı var mı bakacağız ama bir tek mantıklı ornek yazmamızı gerektirir) *tekrar: her gün toplantı var haftada bir toplantı var [çok mantıklı çok sayıda örnek çıkıyor kesinlikle olmalı] *başlangıç tekrar: onunda haftada bir toplantı var haftaya her gün toplantı var (yahu bu başka anlam taşıyabilir çok temiz değil, artık sadece bu anlamı taşıdığını kabul edeceğiz) on ocakta ikigünde bir toplantı var (bunlar çok saçma geliyor bir kaç yardımcı kelime eklemeyi deniyelim) on ocaktan itibaren iki günde bir toplantı var (biraz daha iyi) on ocaktan itibaren haftada bir toplantı var (daha mantıklı demekki her tekrar her cümleye uymuyor) on ocaktan başlıyarak haftada bir toplantı var (güzel) on ocaktan sonra haftada bir toplantı var (bu da iyi) [ok demekki bu yapıda da pek çok mantıklı cümle çıkabiliyor ama yardımcı kelime olarak itibaren, sonra, başlıyarak çıktı] *tekrar başlangıç: haftada bir onundan sonra toplantı var (mantıklı gibi, ben kullanmam ama kullanan vardır herhalde) haftada bir haftaya toplantı var ayda bir çarşamba günleri üç marttan sonra toplantı var (aslında burada virgülün önemi ortaya cıkıyor) [ok bu grupta mantıklı görülüyor, virgül sorununu unutmayalım] *bitiş tekrar: onuna kadar haftada bir toplantı var üç marta kadar iki günde bir toplantı var üç mart ikibinüçe kadar iki haftada bir toplantı var [bu grupta mantıklı görülüyor[bu grupta mantıklı görülüyor] *tekrar bitiş her iki günde bir onuna kadar toplantı var (bu grup mantıksız geldi ancak aşagıdaki ilave kelimelerle olabilir) her iki günde bir tekrarlamak şartıyla on ocağa kadar toplantı var (bunu acaba kabul etmeli miyim?) *başlangıç tekrar bitiş yapısındaki cümleler: onunda her gün onuna kadar toplantı var (bana çok saçma geldi) *tekrar başlangıç bitiş yapısı: her gün onundan yirmisine kadar toplanti var haftanın her salısı onuyla yirmisi arası toplantı var (bu arası olayı ilginç yeni bir phraseimiz çıktı) [bu yapı genelde saçma ama iyi birşeyler cıkabilir şu arası olayı ilginç] *başlangıç bitiş tekrar yapısı: onuyla yirmisi arası haftada bir toplantı var üç mart ile dört nisan arasında haftada bir toplantı var ikibin ile ikibin üç arasında her ayın üçünde toplantı var (güzelde sadece yıl ismi verilince ne olacak (ben ocak 1 alalım derim)) [bu mantıklı bir yapı] ok recurring icin bir phrase semantigi olusturalim o zaman: Sem=recur-baslangic-tekrar-bitis seklinde olsun gunluk haftalık aylık yıllık ayrımına gitmeye gerek yok herhalde o zaman ne kadarlik tekrar olacagini tutma sorunu cikiyor peki teker teker inceliyelim: gunluk toplantilar: bu kerteriz olustursun buna gore gidelim yani Sem=recur-g-n-baslangicgunu-_-_-_-bitisgunu (her n günde bir) haftalik toplantilar: bu basit her sali toplanti var denilirse Sem=recur-g-7-baslangicgunu(sali)-_-_-_-bitisgunu (her 7 günde bir) aylik toplantilar: outlooka baktim ayda bir diyemiyorsun, her ayin 3u yada her ayin ilk salisi diyebiliyorsun Sem=recur-a-2-baslangicgunu-_-1-sali-bitisgunu (Her iki ayda bir ayin ilk salisi) Sem=recur-a-1-baslangicgunu-_-10-_-bitisgunu (her ay ayin onuncu gunu) yillik toplantilar: her yil martin ilk pazartesi Sem=recur-y-1-baslangicgunu-3(mart)-1-pazartesi-bitisgunu her iki yıldabir martin ikinci salisi Sem=recur-y-2-baslangicgunu-3-2-sali-bitisgunu ok o zaman bizim bir recurring semantigi icin sunlara ihtiyacimiz var: Sem=recur(Tt,Ts,Bg,Ba,By,Ta,Tgs,Tgg,Eg,Ea,Ey) Tekrartipi,tekrarsayisi,baslangicgunu,baslangicayi,baslangicyili,tekrarayi,tekrargunsayisi,tekrargunuzun,endgun,enday,endyil o halde bu semantigi oldugu gibi takvim semantiginin icine koyacagim, Sem=takvim(ID,D,S,G,A,Y,K,N,NE,Dur,Recurring) Recurring=recur(Tt,Ts,Bg,Ba,By,Ta,Tgs,Tgg,Eg,Ea,Ey) fikir degistirdim Bg,Ba,By gereksiz (bunlari normal toplanti gun ay ve yil bilgilerini kullanarak tutalim derim) yeni Recurring: Recurring=recur(Tt,Ts,Ta,Tgs,Tgg,Eg,Ea,Ey) sematigimiz yukaridaki forma sahip olsun, hem relational database mantigina gore dusunursek recurring event cok olmayan birsey ve biz her eventa recurring event fieldi eklersek ve olmazsa sacma bir field her record icin yer tutacak zannediyorum outlooku tasarlayanlarda bu sekilde tutuyorlar (aksi halde her toplantida recurring sorusu sorardi) ok yukaridakileri eklerken gordum ki, oflazerin arcsonunda ikinci gibi bir kelime kabul edilmiyor. Bende arcson ve morphosona ilgili ilaveleri yaptim ancak morphosona cok hakim olmadigim icin sesli uyumu ve ekin son seslisi sessizi gibi seyleri yapamadim yani sun anda ikinci kelimesini kabul ediyoruz ama ikincileri ikinciyi gibi devamindaki ekleri kabul etmiyoruz (benim isimi gecici olarak cozuyor) assumptionlara ilave: milattan oncesini dusunmuyoruz (gariptir simdiye kadar aklima gelmemisti ama bunu yapmadik, sanirim gerekte yok) ok recurringleri anlama kismi: recurring eventlari anlamamiz nerelerde gerekiyor? 1. soru cumleleri: haftaya kac toplanti var gibi 2. goster fiilleri: aliyle toplantilari goster 3. zamani bekleyip randevu geldiginde pop eden mekanizma (henuz yok) 4. yeni bir toplanti eklendigi zaman cakismayi detect eden mekanizma(henuz yok) soru cumleleri basit, baslangic tarihinden sonra, bitis tarihinden once ve periyodu rastlayan toplantilari var kabul edecegiz (semantigini nasil yapacagimi henuz bilmiyorum) goster fiilleri, bunlara cevap olarak acilmis halini gostermemeliyiz, yani aliyle toplantilari goster dediysek ve haftada bir toplanti var acip 10.3.200de 17.3.2000de 24.3.2000de diye sonsuza kadar gostermek anlamsiz olur, onun yerine takvim goster fonksiyonumuzdaki tablonun ustune yeni bir alan ekleyip orada baslangic, bitis, ve tekrar zamanlarini gosterebiliriz. 3 ve 4. maddeler yapi olarak 1'e cok benziyor tamam 2. goster fiillerini hallettim sanirim ok test ettim on ocak ikibin ile on mart ikibiniki arasinda haftada bir cananda aliyle toplanti var dedim sonrada alileri goster dedim recurringi yakalayip gosterdi ok soru cumleleri icin yapmaya geldi sira. takvimcagir fonksiyonunun oraya birseyler ekledim ama basarisiz bir denemeydi daha iyi bir kafayla bakmam lazim. ------21/03/2003----- ok, takvim cagirin icine rastlar mi koydum, sayet recurring olayimiz varsa bunun rastlama ihtimalini kontrol ediyoruz, rastlamasi icin tarih karsilastir calisiyor, su asamada sadece tarih araligini kontrol ediyoruz, bunun uzerine rastlarmi fonksionunda periyot kontrolu de yapmamiz lazim. --------07/04/2003----- rastlarmi fonksiyonunun icini yazmaya basladim: gunluk rastlarmilar icin asagidaki pseudeo kodu oneriyorum: begin algorithm gunrecurring tarama if(baslangic tarihi rastlar mi?) begin true dondur end else begin dongu: periyot kadar gunarttir if(bitistarihigectimi) begin false dondur end else begin if(rastlar mi) begin true dondur end else begin goto dongu end end end end. sayet bitis tarihi verilmediyse sonsuz kere donme ihtimali var, o yuzden bitis tarihi verilmeyen gunluk recurring olaylarinin bitis yilini baslangic yilindan iki yil sonraya set ediyorum. bir yil yapsaydik sayet o zaman yil sonuna yakinken olan olaylari yakaliyamiyabilirdik.