Discussion:
lisp ile web sayfası çalışmalarımdan
k***@hotmail.com
2008-08-17 15:14:30 UTC
Permalink
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 ~{~a=\"~a\" ~}>~{~a~}</~a>~%" tag parametre icerik tag) )

;içeriði olmayan taglar için: input img gibi

(defun %- (tag parametre) (format nil "<~a ~{~a=\"~a\" ~}/>~%" 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ý")

)

)
Volkan YAZICI
2008-08-17 18:18:50 UTC
Permalink
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.
k***@hotmail.com
2008-08-17 18:31:17 UTC
Permalink
ben daha yeni yeni bu konular alışıyorum. bu yüzden birçok eksiğim ve hatam
oluyor doğal olarak. sorunumun nedenini ve aslında sorun olmadığını
gösterdiğiniz için teşekkür ederim. tavsiye ettiğiniz kütüphaneleri kısa
sürede incelemeye çalışacağım.

bu arada emailiniz şimdi geldi az önceki soruyu daha açık soracaktım ki
cevabı yollamışsınız sağolun

--------------------------------------------------
From: "Volkan YAZICI" <***@ttmail.com>
Sent: Sunday, August 17, 2008 9:18 PM
To: <cs-***@cs.bilgi.edu.tr>
Subject: [cs-lisp] Re: lisp ile web sayfası çalışmalarımdan
Post by Volkan YAZICI
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
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
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp
Loading...