Có bất kỳ giải pháp kiên trì nào cho Common Lisp, chẳng hạn như Elephant, cho phép duy trì chức năng không? Hiện tại, ứng dụng của tôi lưu trữ số nhận dạng trên db và các tìm kiếm sau trong bảng chức năng, nhưng phương pháp này không cho phép lưu trữ các hàm được tạo động.Chức năng tồn tại trong Common Lisp
Trả lời
Nó không phải là một cơ chế cơ sở dữ liệu bền bỉ, nhưng hầu hết Lisps chung có một cách writing FASLs cho tất cả các loại đối tượng, kể cả các chức năng. Ví dụ:
cl-user(1): (compile (defun hello() (format t "~&Hello~%")))
hello
nil
nil
cl-user(2): (excl:fasl-write (symbol-function 'hello) "/tmp/hello.fasl")
t
cl-user(3): (excl:fasl-read "/tmp/hello.fasl")
(#<Function hello @ #x1000a964d2>)
Bạn có thể ghi một cách trivially những byte đó và đưa chúng vào cơ sở dữ liệu nếu bạn muốn.
Chức năng là các đối tượng mờ, vì vậy bạn sẽ không có nhiều may mắn khi lưu trữ chúng trong các tệp hoặc nội dung tương tự. Tuy nhiên, bạn có thể lưu trữ danh sách và compile chúng khi truy xuất từ cơ sở dữ liệu.
Điều này sẽ không giúp bạn lưu trữ bao đóng, tất nhiên. Điều đó sẽ đòi hỏi phải lưu trữ môi trường từ vựng cùng với mã, không phải trong đó bạn có quyền truy cập (di động). Mã mà bạn biên dịch từ danh sách được lưu trữ sẽ phải dựa hoàn toàn vào dữ liệu toàn cầu hoặc dữ liệu được lưu trữ trong cơ sở dữ liệu.
Nhân tiện, hãy lưu ý rằng bạn có thể funcall biểu tượng, do đó bạn không cần bảng chức năng cho các chức năng chung.
Bạn có thể xem xét lưu hình ảnh Lisp. Điều này cho phép tiết kiệm "đủ thông tin để khởi động lại quá trình Lisp sau đó". Bạn có thể lưu các chức năng của mình sau khi đã tải chúng vào ảnh.
này cũng có thể là một chút tiến bộ hơn những gì bạn đang tìm kiếm, nhưng đây là một (rất) giới thiệu ngắn gọn quy trình: Saving a Core Image
Common Cold có thể là những gì bạn muốn. Nó bao gồm đóng cửa nối tiếp và tiếp tục nối tiếp.
Pascal Bourguignon đã cho số standard solution on comp.lang.lisp. Về cơ bản, bạn phải viết biểu mẫu nguồn vào một tệp và COMPILE
nó sau đó LOAD
nó.
(defvar *anon*)
(defun save-anonymous-function (fname args body)
(let ((fname (make-pathname :type "LISP" :case :common :defaults fname)))
(with-open-file (src fname :direction :output
:if-does-not-exist :create :if-exists :supersede)
(print `(defparameter *anon* (lambda ,args ,body)) src))
(compile-file fname)))
Sau đó, bạn sẽ phải đọc tệp và lưu trữ trong cơ sở dữ liệu của mình. Để lấy lại nó, bạn cần phải lấy nó từ cơ sở dữ liệu và viết nó vào một tệp trước khi tải nó.
(defun load-anonymous-function (fname)
(let ((*load-verbose* nil)
(*anon* nil)) ; to avoid modifying the global one.
(load fname)
*anon*))
Hãy cẩn thận khi lưu trữ mã có thể không tốt. Các nhà phát triển Zope đã học được nó một cách khó khăn.
Điều đó nghĩa là gì? Một chút thông hiểu hơn sẽ hữu ích hơn nhiều ... – AticusFinch
- 1. Clojure: Tương đương với chức năng Common Lisp READ?
- 2. Hiệp hội trong Common Lisp
- 3. Tại sao không tồn tại một nguyên thủy `call-with-current-continuations` trong Common Lisp?
- 4. Luồng trong Common Lisp?
- 5. Vẽ cây trong Common Lisp
- 6. Phân loại lớp trong Common Lisp
- 7. gói Common Lisp nét
- 8. Khung web tốt nhất trong Common-lisp?
- 9. Cạo một bảng HTML trong Common Lisp?
- 10. Tại sao dấu hai chấm trước biến trong Common Lisp
- 11. nếu chức năng không tồn tại ghi chức năng - javascript
- 12. định nghĩa setf-expanders trong Common Lisp
- 13. Common Lisp tương đương với C enums
- 14. Binaries Biên soạn với Clozure Common Lisp
- 15. tập Common Lisp/Vấn đề
- 16. Sử dụng Nhãn trong Common Lisp
- 17. Chuyển danh sách trong Common Lisp
- 18. 5E | có nghĩa là trong Common Lisp?
- 19. Lưu trữ ngày trong Common Lisp
- 20. Đổi tên lambda trong Common Lisp
- 21. Lisp: Macros vs Chức năng
- 22. gói thống kê cho Common Lisp
- 23. Chức năng này có tồn tại trong PHP không?
- 24. Chức năng Erlang không tồn tại trong mô-đun?
- 25. mã nguồn làm đẹp cho lisp (Common Lisp, Scheme, Clojure)
- 26. (Ngẫu nhiên) trong Common Lisp Not So Random?
- 27. Common Lisp: tạo một thư mục
- 28. Clozure Common Lisp - Lập trình socket TCP - Gửi trả lời
- 29. Phát tệp MIDI từ Common Lisp
- 30. Khi nào định dạng thực sự in trong Common Lisp?
Nhưng bạn nên lưu ý rằng nó không nằm trong tiêu chuẩn CL. –