Elephant와 같은 Common Lisp에 대한 지속성 솔루션을 통해 함수 지속성을 유지할 수 있습니까? 현재 내 응용 프로그램은 db에 식별자를 저장하고 나중에 함수 테이블에서 검색하지만이 메서드는 동적으로 생성 된 함수를 저장할 수 없습니다.Common Lisp의 함수 지속성
답변
그것은 데이터베이스 지속성 메커니즘 아니지만, 가장 일반적인 Lisps가 있습니다
이 또한 여기 당신이 찾고 있던 것보다 좀 더 진보 할 수 있지만,이 과정에 (매우) 간단한 소개 방법을 포함한 모든 종류의 개체에 대한 writing FASLs. 예를 들어 :
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>)
당신은 스트림 (여기에 내가 편의를 위해 파일을 사용)에 기록 할 수있는, 그래서 당신은 하찮게 그 바이트를 캡처하고 당신이 원한다면 데이터베이스로 물건 수 있습니다.
함수는 불투명 한 객체이므로 파일이나 그 안에 뭔가를 저장하는 것이별로 도움이되지 않습니다. 그러나 목록을 저장할 수 있으며 데이터베이스에서 검색시 compile을 저장할 수 있습니다.
물론 이것은 클로저를 저장하는 데 도움이되지 않습니다. 그렇게하면 코드와 함께 어휘 환경을 저장해야하며 어느쪽에도 (휴대용) 액세스 권한이 없습니다. 저장된 목록에서 컴파일하는 코드는 전체 데이터 또는 데이터베이스에 저장된 데이터에 전적으로 의존해야합니다.
그런데 funcall 심볼을 사용할 수 있으므로 전역 함수에 대한 함수 테이블이 필요하지 않습니다.
Lisp 이미지를 저장할 수 있습니다. 이렇게하면 "나중에 Lisp 프로세스를 다시 시작할 수있는 충분한 정보를 저장할 수 있습니다." 이미지를 이미지에로드 한 후 함수를 저장할 수 있습니다. Saving a Core Image
Common Cold을 원할 수도 있습니다. 직렬화 가능 클로저와 직렬화 가능 연속을 포함합니다.
파스칼 부르 기뇽 (Pascal Bourguignon)은 standard solution on comp.lang.lisp을 주었다. 기본적으로 소스 양식을 파일에 작성해야하고 COMPILE
다음에 LOAD
입니다.
(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)))
그런 다음 파일을 읽고 데이터베이스에 저장해야합니다. 다시 가져 오려면 데이터베이스에서 파일을 가져 와서 파일에로드해야합니다.
(defun load-anonymous-function (fname)
(let ((*load-verbose* nil)
(*anon* nil)) ; to avoid modifying the global one.
(load fname)
*anon*))
코드를 저장하는 것이 좋지 않을 수 있습니다. Zope 개발자는 어려운 방법을 알게되었습니다.
그게 무슨 뜻입니까? 더 자세한 설명이 훨씬 더 유용 할 것입니다 ... – AticusFinch
- 1. CLOS는 Common Lisp의 약점입니까?
- 2. Common lisp의 가비지 수집기?
- 3. Common Lisp의 클래스 내성 검사
- 4. Common Lisp의 효율적인 수집 기능
- 5. Lisp의 SQLite 사용자 정의 함수
- 6. 문자열 객체를 Common Lisp의 해시 키로 사용하기
- 7. Common Lisp의 디렉토리를 반복하는 방법은 무엇입니까?
- 8. Common Lisp의 목록에서 가장 중첩 된 목록 찾기
- 9. Common Lisp의 초보자 : 즉석에서 패키지 정의를위한 매크로 질문
- 10. Common Lisp의 속성 목록이 일부 전역 상태를 참조합니까?
- 11. 이맥스 Lisp의 PPRINT?
- 12. Lisp의 포인터?
- 13. Common Lisp와 Scheme에서 deftype의 차이점
- 14. Qt + Lisp의 좋은 구현은 무엇입니까?
- 15. Lisp의 str_replace?
- 16. 지속성
- 17. Lisp의 Ant (또는 NAnt)
- 18. 이맥스 Lisp의 날짜와 시간
- 19. 'Lisp의 특별한 형태로 효과가 있습니까?
- 20. 일반적인 lisp의 & rest-parameters 다루기
- 21. 내가 LISP의 교실 훈련을 만들고있어
- 22. 이맥스 Lisp의 자연 순서 정렬
- 23. 지속성 하나
- 24. Sharepoint 지속성
- 25. 세션 지속성
- 26. 캐시 지속성
- 27. Vaadin과의 지속성
- 28. 링크 된 변수의 지속성
- 29. EF - Common Query Again
- 30. Scheme 또는 Common Lisp
하지만 CL 표준에 포함되어 있지 않습니다. –