Okuyucunun değiştirilmesi, yeni okuma sözdiziminin ( #(hash table)
ve gibi '(quoted)
) kullanılmasına izin verecektir . Birçok Lisps bu yeteneğe sahiptir, ancak elisp için böyle bir tesis mevcut değildir.
Okuyucunun değiştirilmesi, yeni okuma sözdiziminin ( #(hash table)
ve gibi '(quoted)
) kullanılmasına izin verecektir . Birçok Lisps bu yeteneğe sahiptir, ancak elisp için böyle bir tesis mevcut değildir.
Yanıtlar:
Kılavuzun, okuyucu makroları gerçekten yapamayacağınızı ima ettiği ortaya çıkıyor.
Göre Ek C nabilirli¤i Common Lisp :
Okuyucu makroları. Ortak Lisp, tek tek karakterler düzeyinde çalışan ikinci bir makro türü içerir. Örneğin, Common Lisp alıntı gösterimini 'adlı bir okuyucu makrosu tarafından uygularken Emacs Lisp ayrıştırıcısı alıntıyı sadece özel bir durum olarak ele alır. Bazı Lisp paketleri, Emacs ayrıştırıcısının okuyamayacağı özel sözdizimleri oluşturmak için okuyucu makrolarını kullanır.
syntax.c
,
Görünüşe göre yapılabilir, ancak çok fazla çalışmaya hazır olun. (ya da yapma, çünkü bunu haftasonu halledeceğim ;-).
(defvar *orig-read* (symbol-function 'read))
(defun read (&optional in)
(message "reading from %s" load-file-name)
(funcall *orig-read* in))
(setq load-read-function (symbol-function 'read))
Şimdi geriye kalan "hepsi", Elisp'in yaptığı her şeyi ve daha fazlasını istediğinizi destekleyen eksiksiz bir Lisp okuyucu uygulamaktır. Bunun defpackage
bir örnek olarak CL benzeri ve paket iç sembolleri sağlamak için kullanılabileceğini düşünüyorum . Ayrıca, normal ifadeler için özel bir sözdizimi kötü yapmak istediğim bir şeydir (veya daha doğrusu ters eğik çizgileri yorumlamayan bazı dize sözdizimi).
Düzenleme: İşte bir kavram kanıtı uygulaması: https://github.com/mishoo/elisp-reader.el