Trong thực tế Common Lisp của Chapter 8, Macros: Xác định riêng của bạn, chúng ta định nghĩa một macro with-gensyms
như sau:Sự khác nhau giữa `(& xs còn lại)` và `xs` trong defmacro danh sách đối số chính thức
(defmacro with-gensyms ((&rest names) &body body)
`(let ,(loop for n in names collect `(,n (gensym)))
,@body))
là gì mục đích của (&rest names)
? Nếu chúng ta thay thế nó chỉ với names
, hiệu ứng có vẻ giống nhau. Trong cả hai trường hợp, chúng tôi chuyển một danh sách các ký hiệu thành "gensym-ed".
Vì vậy, nó thành ngữ để sử dụng '((& rest args))' khi chúng ta mong đợi 'args' là một danh sách? –
@TianxiangXiong: bạn có muốn sử dụng cấu trúc cụ thể hơn không? –
Vâng, tôi cho là vậy. –