Tôi nhận ra rằng một phần nhất định của mã của tôi bao gồm các nhóm phương pháp trông tương tự (như tôi có nhiều bộ ba: một hàm trợ giúp được gọi bởi hai hàm khác dành cho lập trình viên). Tôi đang cố gắng để viết một macro sẽ xác định ba chức năng cho tôi để tất cả tôi cần làm là gọi macro. Nhưng nỗ lực của tôi dẫn đến defuns và chức năng cuộc gọi đã trích dẫn chuỗi thay vì tên được tạo ra như là biểu tượng mới. Tôi đang làm gì sai?lisp chung: làm thế nào macro có thể xác định các phương thức/macro khác bằng tên được tạo theo chương trình?
Ví dụ (mã không chính xác)
(defmacro def-trio (base-name)
(let
((helper-name (format nil "helper-~a" base-name))
(method-1 (format nil "~a-1" base-name))
(method-2 (format nil "~a-2" base-name)))
`(progn
(defun ,helper-name() 'helper-called)
(defun ,method-1() (,helper-name) '1-called)
(defun ,method-2() (,helper-name) '2-called))))
Bây giờ sau xảy ra:
(def-trio my-trio)
==>
(PROGN (DEFUN "helper-MY-TRIO"() 'HELPER-CALLED)
(DEFUN "MY-TRIO-1"() ("helper-MY-TRIO") '1-CALLED)
(DEFUN "MY-TRIO-2"() ("helper-MY-TRIO") '2-CALLED))
Ngoài ra, sau khi tôi học cách để làm việc này, là có thêm gotcha nếu tôi có macro này xác định các macro khác thay vì các chức năng khác? Tôi đọc How do I write a macro-defining macro in common lisp nhưng tôi nghĩ câu hỏi của tôi hơi khác một chút vì tôi hỏi về các biểu tượng/tên được tạo lập trình. Tôi đang mở để được sửa chữa mặc dù :) Cảm ơn!
Vui lòng gửi câu hỏi 'macro xác định các macro khác' làm bài đăng riêng biệt vì nó không liên quan chặt chẽ. –