Câu hỏi được gắn thẻ «elisp-macros»

Macro Emacs Lisp cho phép bạn xác định cấu trúc điều khiển mới và các tính năng ngôn ngữ khác. Macro được định nghĩa giống như một hàm, nhưng thay vì cho biết cách tính giá trị, nó cho biết cách tính một biểu thức Lisp khác, đến lượt nó được đánh giá để tính giá trị. Chúng tôi gọi biểu thức này là "mở rộng" của lệnh gọi macro. Lệnh gọi macro đầu tiên được mở rộng và sau đó được đánh giá, trả về giá trị của đánh giá đó.





2
Làm thế nào để sử dụng while-no-input?
Từ chuỗi tài liệu: Chỉ thực hiện CƠ THỂ miễn là không có đầu vào đang chờ xử lý. Nếu đầu vào đến, kết thúc việc thực thi BODY và while-no-inputtrả về t. Bỏ cuộc làm cho nó trở về con số không. Nếu BODY kết thúc, while-no-inputtrả về bất …


1
Làm thế nào là phạm vi biến cho các macro được xác định?
Lấy macro ví dụ sau, được định nghĩa trong macro.el. (defmacro some-macro (&rest body) `(let ((some-variable 1)) ,@body)) Và mất chức năng sau đây, được định nghĩa trong một tập tin khác nhau , function.el. (defun some-function () (some-macro (do-something))) Khi function.elđược biên dịch byte, sẽ some-variablebị ràng buộc theo …

1
eval-when-compile: defsubst vs defmacro vs notify-inline
Tôi đã định nghĩa một số hàm đơn giản trong init.el, ví dụ my-cache-file: (defconst my-cache-directory (expand-file-name ".cache" user-emacs-directory)) ; ~/.emacs/.cache (defun my-cache-file (x) (expand-file-name x my-cache-directory)) ; ~/.emacs/.cache/x (setq savehist-file (my-cache-file "savehist")) (setq backup-directory-alist `(("." . ,(my-cache-file "backups/")))) Đây có vẻ như là một trường hợp sử dụng tốt …


1
Tự động tải và biến
Tôi hiểu những gì tự động tải cho các chức năng (đăng ký tập tin để tải khi chức năng đó được gọi hoặc chuỗi tài liệu của nó được lấy). Tuy nhiên, không rõ cách sử dụng tiện ích tự động tải kết hợp với các biến và macro. …

1
Setf mở rộng kỳ lạ
Cố gắng hiểu những gì setfcó thể làm, tôi gọi (macroexpand '(setf (aref vec i) val)) ⇒ (let* ((v vec) (v i)) (aset v v val)) Điều này rõ ràng là sai. Tuy nhiên tôi không thể tạo ra một ví dụ thực tế khi (setf (aref ..thất bại. Ví …

1
Các macro cl-flet không thể cho phép các hàm đệ quy
Tôi đã quen với macro elisp không dùng nữa fletvà tôi được yêu cầu đổi sang cl-flet. Tuy nhiên, khi thực hiện thay đổi này, một số chương trình elisp của tôi đã ngừng hoạt động và tôi nhận ra lý do là, không giống như flet, cl-fletkhông cho phép …

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.