Clojure'daki köşeli parantezler ve kıvırcık parantezler hala S ifadeleri mi?


12

Lisp'i öğrenmeye çalışıyorum ve orada bulunan tüm Lisps'lere ve farklılıklarına bakıyorum.

Şema'nın bazı uygulamalarında, okunabilirlik için yuvarlak köşeli parantezler ile değiştirilebilir şekilde köşeli parantezler kullanabileceğinizi görüyorum, bu yüzden aynı muamele gördükleri için, hala her şey gibi sadece S-ifadeleri olduğunu varsayıyorum.

Bununla birlikte, Clojure'da, köşeli parantezlerin ve süslü parantezlerin vektörler ve benzeri gibi farklı veri türlerini temsil etmek için kullanıldığını görüyorum. Bunlar hala geçerli S-ifadeleri mi, yoksa atom olarak mı görülmeli? Bu, tüm S-ifadeleri kavramını “kırmaz”, böylece Clojure'u “saf olmayan” Lisp yapar mı?


Teknik olarak "köşeli parantezler s-ifadesi ise, bunları parantezle nasıl ifade edebilirsiniz?" sorunun bir parçası değildi, ama bilmek istediğim şey bu.
Qwertie

Yanıtlar:


10

Vektörler ve haritalar için gerçek gösterim (yani köşeli parantezler ve süslü parantezler) sadece okuma zamanı şeklidir ve bu gösterimle temsil edebileceğiniz her şey S ifadeleriyle de temsil edilebilir. Sonuç olarak, güç veya homoiklik kaybı yoktur ve aslında bir dizi lispte (daha da güçlü olduğunu anladığım) okuyucu makroları mevcuttur.

Bu arada, Clojure'un artık diğer değişmezler gibi, derlenmeden ve yorumlanmadan önce S ifadelerine dönüştürülen özel "etiketli" değişmezler oluşturmak için bir mekanizma sağladığını unutmayın.


1
Mmm, cevabınız bana Lisp hakkında anladığımı sandığımdan daha az anladığımı düşündürüyor. Yani (sanırım) söylediğiniz şey, kare ve kıvırcık parantezlerin aslında S-ifadeleri değil. Lisp girdisiyle ilgili tüm fikrin her şeyin bir S-ifadesi olduğunu düşündüm. Cevabınızı tekrar okumak için geri gelmeden önce biraz daha kazma yapmam gerekiyor gibi görünüyor. Teşekkürler!
mydoghasworms

Bu doğru - S ifadeleri değiller. Lisp sözdizimi S-ifadeleri ile başlar , çünkü dilde ifade edilebilecek her şey S-ifadeleri ile ifade edilebilir. Ancak Lisp sözdizimi burada bitmiyor: birçok Lisp derleyicisinin, kaynak koddaki özel modellerin S ifadelerine dönüştürüldüğü açık bir okuma makro aşaması vardır. Bu, dil yazarlarının programcılara insan dostu sözdizimi sunmasını sağlar. Dikkat edilmesi gereken önemli nokta, bu özel değişmez değerlerle temsil edilen herhangi bir şeyin S ifadelerinde de temsil edilebildiğinden, homoikonisitenin faydalarının hiçbiri kaybolmaz.
tvachon

3

S-ifadeleri veriler için metinsel bir temsildir. Sayılar, semboller, eksilerini hücreleri, listeler, dizeler, ... Ortak Lisp de diziler, vektörler, daha fazla sayı türleri, karakterler, için metinsel gösterimleri vardır ... Ortak Lisp de kullanıcı tarafından genişletilebilir, böylece kullanıcı genişletilebilir bir okuyucu sağlar veri türleri için daha fazla metin sunumu. Bazen bu mekanizma Lisp programlama dilinin sözdizimini değiştirmek için de kullanılır (örneğin, diğer programlama dillerinden gelen infix ifadelerini veya ifadelerini desteklemek için).

Bu nedenle, bir Lisp lehçesi ek veri türleri için metinsel sunumlar sunuyorsa, bu s-ifadeleri fikrine çok uygundur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.