On Sun, 17 Aug 2008, <[EMAIL PROTECTED]> writes:
> lisp ile ilgili sayfalarda web tasarımında nasıl kullanılabileceğine
> dair birçok konu okudum (asıl esin kaynağım lisp ile web programlamaya
> dalış). ancak diğerlerinin açık kodlarını okurken biraz bana garip
> geldi. bende 3 basit komut yazdım. ilk iki komut sadece web
> sayfalarında değil xml oluşturmada da kullanılabilir diye düşünüyorum.
> tagların ve parametre adlarının çift tırnak içinde yazılması garip
> gelebilir. ben de ilk etapta onları çift tırnaksız veya
> sembolleştirmeden yazayım diye düşündüm.

Aslında XML'in büyük-küçük harf duyarlı (case-sensitive) olduğu
düşünülecek olursa, garip değil. (Ki böyle kullanılmasının taraftarı
olmadığımı belirtmek isterim.)

> sonra farkettim ki bunların veri olarak girilmesi hem lispin mantığına
> uygun, hemde bu tagların ve parametre adlarının istenildiğinde kodu
> değiştirmeden değiştirilebilmesinin sağladığı kolaylıktan dolayı bu
> şekilde bıraktım.

Burada sizi doğru anlamış mıyım, bakalım: "Sadece `%', `%-' ve `%%'
fonksiyonlarını değiştirerek, kodun geri kalanında bir değişikliğe gerek
kalmaksızın oluşacak çıktı üzerinde söz sahibi olabilirim."
diyorsunuz. Bu doğru; fakat makro kullanan sexp-to-html yöntemleri için
de kısmen doğru. Şöyle ki:

1. Makro kullanan sexp-to-html metodları `compile time' esnasında tüm
   sabit (statik) veriyi tek sefere mahsus olmak üzere tek bir katar
   (string) halinde üretip, `evaluation time' esnasında gerçekleşecek
   olan oldukça fazlaca bir `string concatenation' işleminden tasarruf
   etmenizi sağlıyorlar. (Bkz. CL-WHO) Bu da oldukça fazla bir başarım
   artışı olarak programınıza yansıyor. (Makroda gerçekleşen bir
   değişikliğin tüm çıktıya yansıması için, makroyu çağıran tüm
   ifadelerin tekrardan derlenmesi gerekiyor bu sebeple.)

2. Makro yerine işlemi, sizin gibi, çalışma esnasında gerçekleştiren
   uygulamalarda (Bkz. UCW), çalışma esnasında ifadelerin değerleri
   bilindiği için -- dikkat, bu makrolar için gereçerli değil -- SGML
   çıktısı üretliriken hata denetimi mümkün olmaktadır.

> şu an en büyük sorunum bu kodları yazarken "\"" karşılığının " olması
> gerekirken \" olmasıdır. maalesef birçok common lisp ortamında denedim
> olmadı. buna ihtiyacımın sebebi xml formatında tag parametresinin
> isim="içerik" yapısında olması zorunluluğu. bununla ilgili sorunuma
> cevap verirseniz sevinirim.

Bir bakalım.

  CL-USER> (defpackage :test (:use :cl))
  #<PACKAGE "TEST">
  CL-USER> (in-package :test)
  #<PACKAGE "TEST">
  TEST> (defun % (tag parametre &rest icerik) (format nil "<~a ~{~a=\"~a\" 
~}>~{~a~}</~a>~%" tag parametre icerik tag) )
  %
  TEST> (defun %- (tag parametre) (format nil "<~a ~{~a=\"~a\" ~}/>~%" tag 
parametre) )
  %-
  TEST> (defun %% (tag parametre) (format nil "~a {~%~a:~a;~%~}~%" tag 
parametre) )
  %%
  TEST> (% "html" '()
         (% "head" '()
            (% "title" '() "Deneme sayfası" )
            (%- "meta" '( "http-equiv" "content-type"
                         "content" "text/html; charset=windows-1254")))
         (% "body" '("bgcolor" "blue" "alink" "black")
            (% "h1" '() "Bu sayfanın konusu yok")
            (% "p" '("align" "left")
               "bu deneme sayfasının ilk satırı")
            (% "p" '()
               "bu deneme sayfasının ikinci satırı")))
  "<html ><head ><title >Deneme sayfası</title>
  <meta http-equiv=\"content-type\" content=\"text/html; charset=windows-1254\" 
/>
  </head>
  <body bgcolor=\"blue\" alink=\"black\" ><h1 >Bu sayfanın konusu yok</h1>
  <p align=\"left\" >bu deneme sayfasının ilk satırı</p>
  <p >bu deneme sayfasının ikinci satırı</p>
  </body>
  </html>
  "
  TEST> (princ *)
  <html ><head ><title >Deneme sayfası</title>
  <meta http-equiv="content-type" content="text/html; charset=windows-1254" />
  </head>
  <body bgcolor="blue" alink="black" ><h1 >Bu sayfanın konusu yok</h1>
  <p align="left" >bu deneme sayfasının ilk satırı</p>
  <p >bu deneme sayfasının ikinci satırı</p>
  </body>
  </html>
  "<html ><head ><title >Deneme sayfası</title>
  <meta http-equiv=\"content-type\" content=\"text/html; charset=windows-1254\" 
/>
  </head>
  <body bgcolor=\"blue\" alink=\"black\" ><h1 >Bu sayfanın konusu yok</h1>
  <p align=\"left\" >bu deneme sayfasının ilk satırı</p>
  <p >bu deneme sayfasının ikinci satırı</p>
  </body>
  </html>
  "

Görüldüğü üzere, aslında çıtkıda bir sorun yok. Fakat siz fonksiyondan
bir `string' döndürüdüğünüz için, çift-tırnaklar ekrana ayıklanarak
basılıyor. Normalde bunlar mevcut değil.


İyi çalışmalar.

P.S. Bu arada ben şiddetle CL-WHO ve ParenScript seçeneğini de gözden
     geçirmenizi tavsiye ediyorum.

_______________________________________________
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp

Cevap