16.12.2020 22:50    

hsnsltk
Lisp çalışırken o an ki aktif ekranda nesneler gözükmüyorsa işleme alınmıyor. Bunu hangi moddan düzeltmem gerekiyor.

17.12.2020 06:48    

Travaci
Kullandığınız lisple de autocadle de ilgili olabilir, kodu paylaşırsanız yardımcı olabiliriz.

17.12.2020 06:59    

ehya
SELECTIONOFFSCREEN komutunu çalıştırın ve değerini 1 yapın.

17.12.2020 15:49    

hsnsltk
Tam anlayamadım ama

Linkleri görebilmek için ÜYE olmalısınız.

bağlantı bu herhalde

admin (17.12.2020 16:57 GMT)

18.12.2020 08:46    

ehya
Bu kadar karmakarışık yazılmış bir lisp içerisinde neden çalışmadığını bulmak için vakit gerek.
Yazan kim ise, ona danışmalısınız.

18.12.2020 14:16    

hsnsltk
Efendim lispi yazan benim. Çalışmayan kısmı en başta da belirttiğim gibi eğer aktif ekranda gözükmüyorsa işleme almıyo. çalışma prensibi şu şekilde;
1)polylinelar seçilip sırayla işleme tabi tutuluyor.
2)polyline regiona çevrilip ağırlık merkez koordinatı alınıyor (text yazımı için)
3)region patlatılarak line nesneleri seçim setine alınıyor. seçim setinde yatay ve dikeylik durumuna göre (eğik çizgiler için ekleme yapacağım.) başlangıç ve bitiş koordinatlarına ekleme ve çıkarmalar yapılıp her çizgi için seçim ekranları oluşturuluyor ve renk değeri kırmızı olan textler bu seçim setine alınmıyor. sonrasında textin layer değeri "minha" ya da "2xminha" değilse seçim setinden çıkarılıyor. bu filtrelerden geçmiş olan "minha" layerındaki text kırmızıya boyanıyor ki bir daha alınmasın. eğer "2xminha" layerında ise text maviye boyanıyor döngü bittiğinde en baştaki filtreden geçebilmesi için (setq textsecimseti (ssget "C" Lbaslangicssgetx Lbitisssgetx '(( 0 . "TEXT")(-4 . "<NOT")(62 . 1)(-4 . "NOT>")))). "2xminha" layerındaki text sorgulama yapılarak rengi maviyse kırmızıya dönüştürülüyor ve o textinde bir daha alınması önleniyor. sonrasında yapılan işlemler basit projelerde 3 tip minha yazım şekli ile karşılaştım "K3 80/210" "80/210" ve ayrı ayrı yazılmış en boy değerleri "80 | 210" gibi hangi tipte ise ona göre işlem yapılıyor. son olarak polyline merkez koordinatına "Minha:...m²" diye yazılıyor.
Uzun ve karmaşık olduğunun farkındayım karmaşık olması benim acemiliğim. Lakin kodu çalıştırdıktan sonra maus tekerleğine çift tıklayıp seçim yerine "all" yazınca çalışıyor. ama polyline seçimi yapılıp aktif ekran yaklaştırılıp nesneler görüntü dışında kaldığında işleme alınmıyor. Yardımcı olabilirseniz sevinirim.
Saygılarımla

18.12.2020 14:28    

Travaci
İşlem yapacağın nesneleri seçtikten sonra zoom extend, bitirdikten sonrada zoom previous yapıp programı sonlandırın.

Ayrıca aşağıdaki mantıkla gereksiz progn ları kaldırmakla bi adım daha ileri gitmeye çalışın.

Kod:

(if (/= "minha" (strcat layerdegerif))
  (progn
    (if (/= "2xminha" (strcat layerdegerif))
      (progn (setq textsecimseti (ssdel teksecimtextf textsecimseti))
        (if (= 0 (sslength textsecimseti)) (setq textsecimseti nil)))
    )
  )
)

Travaci (18.12.2020 14:42 GMT)

18.12.2020 14:42    

hsnsltk
Anladım. (command "zoom" "e") şunu yazmam yetti. Yardımınız için çok teşekkür ederim.

18.12.2020 14:45    

hsnsltk
Alıntı
Travaci :
İşlem yapacağın nesneleri seçtikten sonra zoom extend, bitirdikten sonrada zoom previous yapıp programı sonlandırın.

Ayrıca aşağıdaki mantıkla gereksiz progn ları kaldırmakla bi adım daha ileri gitmeye çalışın.

Kod:

(if (/= "minha" (strcat layerdegerif))
  (progn
    (if (/= "2xminha" (strcat layerdegerif))
      (progn (setq textsecimseti (ssdel teksecimtextf textsecimseti))
        (if (= 0 (sslength textsecimseti)) (setq textsecimseti nil)))
    )
  )
)



Dediğiniz de haklısınız daha çok yeni olduğum için deneme yanılma yoluyla ilerliyorum. Çalışıyorsa benim için tamamdır mantığından uzaklaşmam gerektiğini de anladım.

22.12.2020 13:03    

ProhibiT
Çoğu zaman olduğu gibi gene biraz uzunca yazacağım, affınıza ve sabrınıza sığınarak.
Sakın yanlış anlaşılmasın, amacım soru sahibi arkadaşımızı hırpalamak değil asla.
Bu konuyu ve soruyu bahana ederek herkese sitem etmek istiyorum.
Alıntı
ehya :
Bu kadar karmakarışık yazılmış bir lisp içerisinde neden çalışmadığını bulmak için vakit gerek.
Yazan kim ise, ona danışmalısınız.


Mehmet hocam, bu mesaja bakmış, soru sahibi yanlış anlar kırılır diye, cevap yazmamıştım.

ehya hocam, "Bu kadar karmaşık yazılmış bir lisp..." derken fazla şefkatli davranmış. Bu lisp'i görünce "Lisp Lisp olalı böyle zulüm görmedi..." diye düşünmüştüm. Bilgisayara eziyet, AutoCAD'e eziyet, Lisp'e eziyet, kullanana, yazana, okuyana eziyet bir durum ortaya çıkmış.

Burada, belki daha önce paylaşmışımdır, bir hikayeyi hatırlayıverdim.
Küçük şehirlerimizden birinde bir nine 70'inden sonra okuma yazma öğrenir. Hızını alamaz, erişebildiği yerlerdeki bütün kitapları okur bitirir. Ninemizin bu okuma aşkı ve azmi memleketin her yanında duyulur. Gazeteci bir hanım röportaj yapmak ister, Nine de kabul eder. Uzun bir konuşma olur, gazeteci kadın Nine'nin anlattıkları karşısında hayretler içinde kalır. Sonunda biraz hayret biraz da şefkat duygularıyla sorar.
- Nine, bu yaştan sonra bunca kitabı nasıl okudun, nasıl güç yetirdin. Nine cevap verir.
- Kızım, onca akıllı adam bunca şeyi yazmaya üşenmemiş, ben okumaya niye üşeneyim ki!

Bundan 6 yıl kadar önce, AutoLisp & VisualLisp kitabım yayınlandığında, tanıtımını yaparken burada, "Lisp konusunda hiç bir yerde bu kadar ayrıntılı ve kapsamlı bir kitap yazılmadı." şeklinde bazılarına çok iddialı, hatta megalomanca gelen bir ifade kullanmıştık. Bugün de hala o sözümün arkasındayım. Sitemim bu kitaptan haberdar olmayanlara, haberdar olup ta almayanlara. Kitap satışından tek kör kuruş almam söz konusu değil elbette. Alınır okunursa burada çokta zor olmayan pek çok soruyla muhatap olmazdık, öğrenen ve yazanlarla gurur duyardık ancak.

Bu kitaptan ssget ile ilgili olan kısmın ekran resimlerini paylaşıyorum...






Buraya dikkat! Ne demişiz?
"Bu seçim yöntemlerinin yanında AutoCAD dokümanlarında yer verilmeyen bazı yöntemlerde kullanılabilir. Söz konusu yöntemler AutoCAD ile birlikte gelen hiçbir dokümanda yer almazlar. Bir kısmı Eski sürümlerde geçerli olup sonradan dokümanlardan kaldırılmakla birlikte hala geçerli ve kullanılabilir yöntemlerdir. Bazıları da Genel LISP programlama dili mantığı ile deneyerek keşfedilmişlerdir."
İşte bunun için diyoruz, hiç bir yerde yok, diye. Bu ve benzeri bazı konular, 80'li yılların ortasından beri (daha da öncesinde Genel Lisp var) AutoLisp dilinde, şimdiki gibi internetin olmadığı, dahası Grafik Kartının olmadığı (EGA bile sonradan çıktı), Hard Disk kavramının olmadığı, birinde program birinde veri dosyaları olan 2 tane floppy (flexy) diskin olduğu, mouse'un icad edildiği ama henüz bize ulaşmadığı, bilgiye ulaşmanın zor olduğu yıllardan beri, zorlayarak ulaşılan kaynaklardan ve deneye yanıla edinilen tecrübeler. Anlayan çıktı mı? Çok az! Onun için bu sitede "Beğenmek için anlamak lazım" diye bir imza kullanıyorum.















ssget yalnızca bir örnek, kitapta AutoLisp ve Visual Lisp konularında en şeytani detaylar ve hatta algoritma kurma mantığı pek çok örnekle açıklanmıştır.
Alıntı
Travaci :
İşlem yapacağın nesneleri seçtikten sonra zoom extend, bitirdikten sonrada zoom previous yapıp programı sonlandırın.
Ayrıca aşağıdaki mantıkla gereksiz progn ları kaldırmakla bi adım daha ileri gitmeye çalışın.


Travacı arkadaşımız zoom extend konusunu açıkladıktan sonra progn konusunda nezaket çerçevesinde bir uyarıda bulunmuş sağ olsun. Bu konuda söylenecek fazla bir şey yok.
Benim aklımdan "Hangi birisi Travacı Hocam, hepisi... hepisi." Demek geçti doğrusu.

Bilinen hikayedir;
Adamın biri “kurban” mevzuunu anlatıyormuş: "Çocuğu olmayan Hazreti Davut, Allah'a dua etmiş, 'Ya rabbi bana bir kız çocuğu ver, onu sana kurban edeyim' demiş. Duası kabul edilmiş, bir kızı olmuş, kızının adını Ayşe koymuş. Zaman geçmiş, çocuğun kurban edileceği vakit gelmiş çatmış. Hazreti Davut Kızı Ayşe'yi dizine yatırmış, bıçağı boğazına dayamış, besmeleyi çekmiş... Azrail, gökten bir Keçiyle çıkagelmiş, 'Kızı bırak, al bu Keçiyi kurban et' demiş..."
Dinleyenlerden biri dayanamamış: Be kardeşim: Hz. Davut değil, Hz. İbrahim; kızı değil, oğlu; Ayşe değil, İsmail; Azrail değil, Cebrail; keçi değil, koç!
Bunun neresini düzelteyim ben şimdi...

Kıssadan hisse, buradaki command tarlasındaki setq katarına bağlanmış command ve progn vagonları gibi Lisp kodlarının neresini yorumlamalı bilmek zor. İşlem kurgusu (algoritma) bir alem, biçim (format) daha da garip... Yani kısacası eziyet bir kod olmuş.
Fakat bu da bir yöntem doğrusu. Hangimiz böyle eziyetleri yapmadık ki, kendimize yada başkalarına.

Hasan Cihat Örter'e sormuşlar, Hocam perdesiz gitarda sesleri tam bulamıyorum, ne yapmam, nasıl çalışmam lazım, diye. Üstat cevap vermiş, üzülme başlangıçta hepimizin başına geliyor, 5-10 sene içinde kendiliğinden buluyorsun, demiş. :)

Buraya kadar, soru sahibi arkadaşımızın hoşgörüsüne sığınarak işin muhabbet kısmıydı. Gelelim işin asıl özüne.

Her şeyden önce fonksiyon adı olarak isim kullanmamanızı hararetle tavsiye ederim. Kendi isminizi çabuk tüketirsiniz.

Bu kadar çok değişken tutmayın. Hem kendinizi, hem makineyi yorarsınız, kontrolü kaybedersiniz. 2 ve daha fazla kez kullanılmayacak hiç bir şeyi değişkene atamayınız. Kullanılan değişkenlerin de Local Variable olarak tanımlanmasında büyük fayda var. Lisp bu konuda çok şefkatli bir dildir, önceden değişkeni, türünü ve boyutunu tanımlamayı gerektirmez. Bunu kötüye kullanıp suistimal etmemekte fayda var.
Kod:

(defun c:dRs (/ bNdR cTr m MnB MnE MnH MnY n nKs PvN PvO pTs SbT)

Local değişkenleri bu şekilde tanımlıyoruz. Fonksiyon çıkışında bu tür değişkenler sıfırlanır, hafızada yer tutmazlar.

Kod:

  (if (not (tblsearch "style" "m2"))
    (entmake (list (cons 0 "STYLE")
                   (cons 100 "AcDbSymbolTableRecord")
                   (cons 100 "AcDbTextStyleTableRecord")
                   (cons 2 "m2") (cons 70 0) (cons 40 0) (cons 41 0.8)
                   (cons 50 0.0) (cons 71 0) (cons 3 "arial.ttf"))))

Hiiç lafı dolandırmaya gerek yok! "m2" yazı stili yoksa entmake ile oluştur, varsa da işine bak yola devam...
Burada gene küçük bir tavsiye; Text Style tanımlarında Yazı yüksekliğini (cons 40 0) şeklinde sıfır olarak veriniz. Aksi halde eski dönemlerde aydıngere çizim yaparken yazı şablonu kullanırmış gibi bir duruma düşersiniz.

Yukarıda detaylıca açıklandığı şekilde ssget kullanarak Polyline'ları seçiyoruz.
Kod:

(if (setq bNdR (ssget (list (cons 0 "LWPOLYLINE"))))
    (setq n (sslength bNdR)) (setq n 0))

Neden ":L" şeklinde Lock edilmemiş Layer için filtre kullanıldı, anlamadım. Bir nedeni olabilir.
Seçim yapıl(a)madı ise n sayacı sıfır olacak, yapıldıysa seçim setinin uzunluğu n değişkenine atanacak.
Burada if içinde şart cümlesi olarak setq kullanımına dikkat ediniz. Polyline seçil(e)mezse setq ifade nil olacak, seçilirse seçim seti olacaktır. Burada şart olarak setq sonucunda nil dışında bir değer olduğunu kontrol ediyoruz.

Kod:

(while (>= (setq n (1- n)) 0)

while döngüsü ile Polyline'ları teker teker işleme alacağız. Seçim seti boş (n=0) ise daha baştan bir eksiltilerek -1 yapılacağından, döngüye hiç girilmeden fonksiyon sonlanacaktır.

Kod:

    (setq PvO (vlax-ename->vla-object (ssname bNdR n))
                 cTr (osnap (vlax-curve-getStartPoint PvO) "gcen")
                 nKs (vlax-safearray->list
                      (vlax-variant-value
                           (vlax-get-property PvO 'Coordinates)))
                 m -2 pTs nil)

Polyline'ın geometrik merkezini bulmak için, önce Region'a çevirip merkezini bulduktan sonra Explode etmek gibi bir ihtiyacımız yok. Ne demiş atalarımız: Don't create the problem than trying the resolve them.
Burada daha önce açıkladığım bir kavramın altını çizmekte fayda var. vlax-curve-... komutlarını görünce eğrilerle ilgiliymiş gibi bir duyguya kapılıyoruz. Halbuki, "Doğru da bombesi sıfır olan bir eğridir."
Yukarıda görüldüğü gibi Geometrik Merkez koordinatları cTr değişkenine alındı. Region explode edildikten sonra ortaya çıkan Line nesnelerine de ihtiyacımız yok. Atalarımızın sözünü dinledik.

Ele alınan Polyline'ın Coordinates (vertex: Köşe Noktalarının Koordinatları) serisi nKs değişkenine atandı.
Elde edilen nKs (2058.76 2078.43 2342.76 2078.43 2342.76 2108.43 2378.76 2108.43 2378.76 2078.43 2662.76 2078.43 2662.76 2670.43 2058.76 2670.43 2058.76 2078.43) biçiminde (x1 y1 x2 y2 ... xn yn) şeklinde köşe noktalarının x ve y koordinat değerlerinden oluşan bir seridir.
Kod:

(while (< (setq m (+ m 2)) (1- (length nKs)))
           (setq pTs (append (list (list (nth m nKs) (nth (1+ m) nKs))) pTs)))

Şeklinde nKs serimizi pTs koordinat çifti listesine çevirdik. ((2058.76 2078.43) (2058.76 2670.43) (2662.76 2670.43) (2662.76 2078.43) (2378.76 2078.43) (2378.76 2108.43) (2342.76 2108.43) (2342.76 2078.43) (2058.76 2078.43))
pTs serisi ile, Explode edilen Region'dan oluşan tüm Line'ların başlangıç ve bitiş nokta koordinatları (hemde sıralı olarak) elimizde.
Kod:

    (if (setq SbT (ssget "CP" pTs (list (cons 0 "*TEXT")
                                    (cons 8 "minha,2xminha")
                                    (cons -4 "<NOT") (cons 62 1)
                                    (cons -4 "NOT>"))))
                          (setq m (sslength SbT) MnH 0) (setq m 0))

Ele aldığımızı Polyline üzerindeki Minha Text'lerini seçerken, ssget'te seçim yöntemi olarak "CP" (Corossing Polygon) kullandım. Burada "F" (Fence) te kullanılabilirdi. Bu durumda, verilen örnek çalışma çiziminde Polyline'lardan birinde, Polyline'a temas etmeyen minha yazısı seçilemezdi.

ssget seçim filtrelerine dikkat!
Obje türü Text (veya Mtext) olan,
"minha" veya "2xminha" Layer'larından birinde bulunan (bunu *text te olduğu gibi *minha da yazabilirdik),
Rengi 1 (kırmızı) olmayan... nesneleri seçiyoruz.
Layer ve Color filtrelerini görüldüğü gibi daha baştan, seçim yaparken koyduk.
Seçim seti boş ise, ilgili Polyline'da bir minha yazısı yoksa m sayacını sıfırladık. Seçilen minha yazısı varsa, seçim setinin uzunluğunu m sayaç değişkenine atadık. MnH (minha) değerini sıfırladık.

Kod:

    (while (>= (setq m (1- m)) 0)

Minha Yazısı adedi kadar tekrarlanacak while döngümüzü kurduk. Sayaç değişkenimizi döngü başında ayarladığımız için, Minha Yazısı Seçim seti boş ise döngüye hiç girilmeden sonraki adıma geçilecek.

Kod:

    (while (>= (setq m (1- m)) 0)
           (setq PvN (entget (ssname SbT m))
                      MnY (substr (cdr (assoc 1 PvN))
                                     (+ (vl-string-position 32 (cdr (assoc 1 PvN))) 2))
                      MnE (/ (atof (substr MnY 1 (vl-string-position 47 MnY))) 100)
                      MnB (/ (atof (substr MnY (+ (vl-string-position 47 MnY) 2))) 100)
                      MnH (+ MnH (* MnE MnB)) txh (cdr (assoc 40 PvN))
                      PvN (entupd (cdr (assoc -1 (entmod (if (assoc 62 PvN)
                           (subst (cons 62 (if (= (cdr (assoc 8 PvN)) "minha") 1 5))
                                (assoc 62 PvN) PvN)
                           (cons (cons 62 (if (= (cdr (assoc 8 PvN)) "minha") 1 5)) PvN)))))))
      (if (> MnH 0)
(entmake (list (cons 0 "TEXT") (cons 10 cTr) (cons 50 0) (cons 8 "m2_yer")
                                     (cons 40 txh) (cons 1 (rtos MnH)) (cons 11 cTr)))))

Her bir Minha Yazısı için;
assoc 1 ile aldığımız Text String'in 32 karakter kodlu "boşluk" karakterinden sonrasını MnY (Minha Yazısı) değişkenine aldık.
MnY yazısının 47 karakter kodlu "/" karakterinden öncesini alarak, gerçek sayıya dönüştürüp, 100'e bölünerek (m birimine cevrilen) elde edilen değer MnE (Minha Eni) değişkenine atandı.
Benzer şekilde MnY yazısının "/" karakterinden sonrası alınarak, gerçek sayıya dönüştürülüp, 100'e bölünerek MnB (Minha Boyu) değişkenine atandı.
MnE ile MnB çarpılarak elde edilen m² birimindeki alan MnH (Minha) değişkeninin değerine eklendi.
İşleme alınan Minha Yazısının Yazı Yüksekliği "txh" değişkenine alındı.
Ele alınan Minha Yazısı "minha" Layer'ında ise 1 (kırmızı), değilse (o zaman 2xminha Layer'ındadır) 5 (mavi) renge çevrildi.
Burada dikkat edilmesi gereken, Nesnenin rengi Baylayer olduğunda ilişkilendirilmiş listesinde (association list) renk numarasını gösteren 62 anahtarlı bölüm bulunmaz. Bunun için işlenen yazının 62 kodlu verisi varsa bu değiştirildi, yoksa listeye eklendi.
subst (substite, substr ile karıştırılmamalıdır) ile değiştirilen veya duruma göre cons ile listeye eklenen renk değeri entmod ve entupd ile ilgili nesnelerde güncellendi.
Gene burada dikkat çekmek istediğim konu: PvN, MnY, MnE, MnB, Mnh değişkenlerinin her biri ayrı ayrı setq ile işlenmemiş tek bir setq içinde işleme alınmışlardır. Hatta ben biraz abartıp, Enmod'un dönüş değerini Entupd, onun dönüş değerinide PvN değişkenine atayıp, Association List olarak başlangıçta işleme aldığımız PvN'yi Entity Name ile sonlandırmayı tercih ettim.

Dikkat edilirse, hiç bir yerde command fonksiyonu kullanmadık. Polyline merkezine Minha Yazısını yazarken de entmake ile oluşturmak daha garantili bir yöntem. command kullanıldığında karmaşık çizimlerde object snap'lere yakalanma riski her zaman vardır. İşleme alınan son Minha Yazısı ile aynı yükseklikte yeni Text oluşturuldu.

Fonksiyonu bir bütün olarak verirsek:
Kod:

(defun c:dRs (/ bNdR cTr m MnB MnE MnH MnY n nKs PvN PvO pTs SbT)
  (setvar "cmdecho" 0) (command "_.undo" "group") (vl-load-com)
  (if (not (tblsearch "style" "m2"))
    (entmake (list (cons 0 "STYLE") (cons 100 "AcDbSymbolTableRecord")
                   (cons 100 "AcDbTextStyleTableRecord") (cons 2 "m2")
                   (cons 70 0) (cons 40 0) (cons 41 0.8) (cons 50 0.0)
                   (cons 71 0) (cons 3 "arial.ttf"))))
  (if (setq bNdR (ssget (list (cons 0 "LWPOLYLINE"))))
    (setq n (sslength bNdR)) (setq n 0))
  (while (>= (setq n (1- n)) 0)
    (setq PvO (vlax-ename->vla-object (ssname bNdR n))
          cTr (osnap (vlax-curve-getStartPoint PvO) "gcen")
          nKs (vlax-safearray->list (vlax-variant-value
                  (vlax-get-property PvO 'Coordinates)))
          m -2 pTs nil)
    (while (< (setq m (+ m 2)) (1- (length nKs)))
      (setq pTs (append (list (list (nth m nKs) (nth (1+ m) nKs))) pTs)))
    (if (setq SbT (ssget "CP" pTs
                         (list (cons 0 "*TEXT") (cons 8 "minha,2xminha")
                               (cons -4 "<NOT") (cons 62 1) (cons -4 "NOT>"))))
      (setq m (sslength SbT) MnH 0) (setq m 0))
    (while (>= (setq m (1- m)) 0)
      (setq PvN (entget (ssname SbT m))
            MnY (substr (cdr (assoc 1 PvN))
                        (+ (vl-string-position 32 (cdr (assoc 1 PvN))) 2))
            MnE (/ (atof (substr MnY 1 (vl-string-position 47 MnY))) 100)
            MnB (/ (atof (substr MnY (+ (vl-string-position 47 MnY) 2))) 100)
            MnH (+ MnH (* MnE MnB)) txh (cdr (assoc 40 PvN))
            PvN (entupd (cdr (assoc -1
                      (entmod (if (assoc 62 PvN)
                            (subst (cons 62 (if (= (cdr (assoc 8 PvN)) "minha")
                                              1 5)) (assoc 62 PvN) PvN)
                            (cons (cons 62 (if (= (cdr (assoc 8 PvN)) "minha")
                                              1 5)) PvN)))))))
      (if (> MnH 0)
        (entmake (list (cons 0 "TEXT") (cons 10 cTr) (cons 50 0)
                       (cons 8 "m2_yer") (cons 40 txh) (cons 1 (rtos MnH))
                       (cons 11 cTr))))))
  (command "_.undo" "e") (princ))


Anlaşılabilirlik ve takip edilebilirlik bakımından pek çok bölümü açarak ve adım adım yazdığım için bu kadar oldu.
ehya, alumina ve Travacı arkadaşlarımız bunu çok daha kısa yazabilirler diye düşünüyorum. :)

Selam ve saygılarımla herkese kolaylıklar dilerim.

ProhibiT (25.12.2020 07:18 GMT)

23.12.2020 08:28    

ehya
Hocam. Ellerinize sağlık. Yine bir makale gibi paylaşım yapmışsınız :) :yes

06.07.2022 22:32    

hsnsltk
Daha önce çalışırken lisp kullanıyordum tabi bunlar sağdan soldan bulduğum lisplerdi. Yapabileceğime inanarak askerde boş zamanım olacağını düşünüp Mehmet Şahin Bey'in kitabını almıştım ve satır satır uğraşıp amacıma ulaşmaktı niyetim. Kitabı baştan sona okudum lispi yazarken çok kere sayfalarını aşındırdım. Çok acemice olduğunun farkındayım aslına bakarsanız ne kadar kibar yaklaşmış olsanız da utanıp iletiyi silmiştim. Onca akıllı adam yazmaya üşenmemiş bana da sizler kadar iyi olmak düşer. Değerli vaktinizi ayırdığınız için teşekkürü borç bilirim.

> 1 <
Copyright © 2004-2022 SQL: 1.608 saniye - Sorgu: 84 - Ortalama: 0.01914 saniye