Memodifikasi pembaca akan memungkinkan pengenalan sintaks baca baru (seperti #(hash table)dan '(quoted)). Banyak Lisps memiliki kemampuan ini, tetapi tampaknya tidak ada fasilitas seperti itu untuk elisp.
Memodifikasi pembaca akan memungkinkan pengenalan sintaks baca baru (seperti #(hash table)dan '(quoted)). Banyak Lisps memiliki kemampuan ini, tetapi tampaknya tidak ada fasilitas seperti itu untuk elisp.
Jawaban:
Ternyata manual itu menyiratkan bahwa Anda tidak bisa benar-benar melakukan makro pembaca.
Menurut Lampiran C Porting Common Lisp :
Makro pembaca Common Lisp termasuk tipe makro kedua yang bekerja pada level karakter individu. Sebagai contoh, Common Lisp mengimplementasikan notasi kutipan oleh pembaca makro yang disebut ', sedangkan parser Emacs Lisp hanya memperlakukan kutipan sebagai kasus khusus. Beberapa paket Lisp menggunakan makro pembaca untuk membuat sintaksis khusus untuk mereka sendiri, yang tidak dapat dibaca oleh pengurai Emacs.
syntax.c...
Tampaknya itu bisa dilakukan, tetapi bersiaplah untuk banyak pekerjaan. (atau tidak, karena aku akan mengatasinya akhir pekan ;-).
(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))
Sekarang "semua" yang tersisa untuk dilakukan adalah mengimplementasikan Lisp reader lengkap yang mendukung semua yang Elisp lakukan dan apa pun yang Anda inginkan. Saya pikir ini dapat digunakan untuk memberikan defpackagesimbol internal seperti-CL dan paket, sebagai salah satu contoh. Juga, sintaks khusus untuk regexps adalah sesuatu yang sangat ingin saya lakukan (atau lebih tepatnya, beberapa sintaks string yang tidak menginterpretasikan garis miring terbalik).
Sunting: inilah implementasi konsep bukti: https://github.com/mishoo/elisp-reader.el