Trong Lisp thông thường, việc tạo macro macro xác định tương đối dễ dàng. Ví dụ: macro sauMacro xác định macro trong vợt?
(defmacro abbrev (short long)
`(defmacro ,short (&rest args)
`(,',long ,@args)))
là macro xác định macro, vì macro này mở rộng sang macro khác.
Nếu bây giờ chúng ta đặt
(abbrev def defun)
trong chương trình của chúng tôi, chúng tôi có thể viết def
thay vì defun
bất cứ khi nào chúng ta định nghĩa một hàm mới. Tất nhiên, abbrev
cũng có thể được sử dụng cho những thứ khác. Ví dụ: sau
(abbrev /. lambda)
chúng tôi có thể viết (/. (x) (+ x 1))
thay vì (lambda (x) (+ x 1))
. Tốt đẹp. (Đối với giải thích chi tiết viết tắt, xem http://dunsmor.com/lisp/onlisp/onlisp_20.html)
Bây giờ, câu hỏi của tôi là:
- Tôi có thể viết các macro vĩ mô xác định trong vợt?
- Nếu có thể, làm thế nào để làm điều đó? (ví dụ, làm thế nào để viết một cái gì đó tương tự như
abbrev
vĩ mô trong vợt?)
Bạn đã đảo ngược các thông số macro của mình, dài phải đến trước. – uselpa
Tôi đã sửa lỗi đó trong câu hỏi của mình. Xe tăng! –