Làm thế nào để cấu trúc lại các chương trình elisp bằng cách sử dụng mô hình khớp trên sexps với sự thay thế?


7

Tôi đang tìm kiếm chức năng có thể thực hiện chuyển đổi nguồn thành nguồn của các chương trình elisp được cung cấp một bộ quy tắc viết lại. Ví dụ: đưa ra một quy tắc như:

(set (make-local-variable (quote ?var) ?value)) => 
   (setq-local ?var ?value)

Nó sẽ tìm thấy tất cả các lần xuất hiện của mẫu và thay thế nó bằng sự thay thế. Một tính năng đáng hoan nghênh sẽ là thực hiện số lượng thay đổi tối thiểu.

Chỉnh sửa: Tôi tìm thấy cái này http://www.informatik.uni-bremen.de/st/lehre/Arte-fakt/Seminar/ con / 06

Câu trả lời:


7

Tôi tin rằng bạn đang tìm kiếm el-searchgói, có sẵn trong kho lưu trữ GNU ELPA. Nó cho phép bạn khớp bằng cách sử dụng pcasecác mẫu và thực hiện chức năng tìm kiếm & thay thế mà bạn mô tả.

Bạn sẽ sử dụng el-search-query-replacevà cung cấp mẫu

`(set (make-local-variable ',var) ,val)

và thay thế nó bằng

`(setq-local ,var ,val)

Đây chính xác là những gì tôi đã nghĩ trong đầu. Cảm ơn.
Gracjan Polak

1

Mở rộng macro Lisp chính xác là: ánh xạ từ Lisp sexps sang Lisp sexps. Bạn bè của bạn cho điều này là defmacrohoặc - đặc biệt hơn - macrolet(còn gọi là cl-macroletEmacs Lisp) và macroexpand(cũng macroexpand-all).

Lưu ý rằng tôi không đề cập đến việc mở rộng macro theo sau là đánh giá mã Lisp kết quả, đó là cách thường sử dụng macro Lisp.

Trong trường hợp này, bạn không muốn đánh giá kết quả của việc mở rộng macro. Bạn chỉ muốn "mở rộng" một Lisp sexp đầu vào để tạo ra một sexp Lisp khác. (Trong khoa học máy tính và logic, điều này đôi khi được gọi là "giảm" hoặc "viết lại".)

(Tất nhiên, để đối phó với những người không có danh sách, bạn cũng cần cung cấp ánh xạ giữa các biểu tượng đã biết và những thứ tương tự.

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.