noem

noem


0 takip ediyor | 0 takip ediliyor


Bilgi alanları


İlgi alanları

Common Lisp ile Internet Programlamaya Giriş Kılavuzu ( 10)

benim daha önceden email ile yazıp cs@cs.bilgi.edu.tr ile danıştığım çalışma stilini sorduğum basit 3 fonksiyondan ikisini makroya çevirip buraya koymuşlar. oldukçada geliştirmişler faydalı olduğum içinde oldukça mutlu olduğumu bildirmek isterim. emaillerin metinlerini aşağıya kopyalıyorum şimdi
bu kodları daha ilk lispe merak sardığım zaman yazmıştım garibinize gidecek bazı hatalar da o yüzden olmuştu :

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. 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. aşağıdaki gibi bir web sayfasının bir kalıp olarak oluşturulup üzerinde kalıp bozulmadan istenilen değişikliğin yapılabileceğini düşünüyorum.

ş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.

;içeriği olan taglar için: html body title body p gibi
(defun % (tag parametre &rest icerik) (format nil "~{~a~}~%" tag parametre icerik tag) )

;içeriği olmayan taglar için: input img gibi
(defun %- (tag parametre) (format nil "~%" tag parametre) )


;basit css tanımlaması
(defun %% (tag parametre) (format nil "~a {~%~a:~a;~%~}~%" tag parametre) )



;örnek bir web sayfası
; genel kalıp (% tag '(parametreler) içerik)
; tag parametreler ve içerik değişkenle veri aktarmadığı sürece çift tırnak içinde
; yazılmalıdır. parametreler ikişerli olarak düşünülmelidir. birinci parametre
; parametre adı ikinci parametre parametre içeriği üçüncü parametre 2.parametrenin
; adı dördüncü parametre 2. parametrenin içeriği ve bu şekilde devam eder.
; içerik tek parça olmak zorunda değildir. o yüzden rest kullandım bu da body gibi
; tagların birçok iç tagına sahip olmasını sağlıyor. text/html çıktısının şu anki en
; büyük sorunu örneğin body tagında geçen bgcolor="blue" olması gerekirken
; bgcolor=\\"blue\\" olması bunu istersem hiç çift tırnak koymayarak ta halledebilirim
; ama öyle kalmasını tercih ettim.

(% "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ı")
)
)



ONLARDAN GELEN CEVAP ;


From: "Volkan YAZICI"
Sent: Sunday, August 17, 2008 9:18 PM
To:
Subject: [cs-lisp] Re: lisp ile web sayfası çalışmalarımdan

> On Sun, 17 Aug 2008, 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))
> #
> CL-USER> (in-package :test)
> #
> TEST> (defun % (tag parametre &rest icerik) (format nil " ~}>~{~a~}~%" tag parametre icerik tag) )
> %
> TEST> (defun %- (tag parametre) (format nil "~%" 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ı")))
> "Deneme sayfası
> charset=windows-1254\\" />
>
> Bu sayfanın konusu yok
> bu deneme sayfasının ilk satırı
> bu deneme sayfasının ikinci satırı
>
>
> "
> TEST> (princ *)
> Deneme sayfası
> />
>
> Bu sayfanın konusu yok
> bu deneme sayfasının ilk satırı
> bu deneme sayfasının ikinci satırı
>
>
> "Deneme sayfası
> charset=windows-1254\\" />
>
> Bu sayfanın konusu yok
> bu deneme sayfasının ilk satırı
> bu deneme sayfasının ikinci satırı
>
>
> "
>
> 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
>