gpt4 book ai didi

lisp - 遵循 lisp 代码库中的定义

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:54 25 4
gpt4 key购买 nike

我想了解 nqthm-1992 代码,这是一个古老的定理证明器。

我使用 ECL 作为 lisp 解释器,并被建议使用 slime 包来找出常见的 lisp 定义和解释。它在 common lisp 声明上表现良好,但在 nqthm 声明上失败。如果我将 nqthm 的 events.lisp 加载到我的 emacs 缓冲区中,我该如何配置它以便找到所有声明?

更新:根据建议,我重新配置了 emacs-slime 以使用 sbcl .尝试查找 ITERATE 的定义时,它给出了以下消息:

Unknown symbol: ITERATE [in #<PACKAGE "COMMON-LISP-USER">] 
[Condition of type SIMPLE-ERROR]

Restarts:
0: [*ABORT] Return to SLIME's top level.
1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "worker" RUNNING {1004942B81}>)

Backtrace:
0: (SWANK::PARSE-SYMBOL-OR-LOSE "ITERATE" #<PACKAGE "COMMON-LISP-USER">)
1: ((LAMBDA ()))
2: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA #) {1004948CA9}>)
3: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:DESCRIBE-SYMBOL "ITERATE") #<NULL-LEXENV>)
4: (SWANK:EVAL-FOR-EMACS (SWANK:DESCRIBE-SYMBOL "ITERATE") "\"USER\"" 2)
5: ((LAMBDA ()))
6: (SWANK-BACKEND::CALL-WITH-BREAK-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA #) {1006D4AFF9}>)
7: ((FLET SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK) #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA #) {1006D4AFF9}>)
8: ((LAMBDA ()))
9: ((FLET #:WITHOUT-INTERRUPTS-BODY-[BLOCK369]374))
10: ((FLET SB-THREAD::WITH-MUTEX-THUNK))
11: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]300))
12: (SB-THREAD::CALL-WITH-MUTEX ..)
13: (SB-THREAD::INITIAL-THREAD-FUNCTION)
14: ("foreign function: #x41E240")
15: ("foreign function: #x416117")

我怎样才能让它工作?

最佳答案

它看起来很像 SLIME 找不到你想要的代码,因为它在错误的包中查找:你显示的错误是 SBCL 说“我查看了 :cl-user 并且找不到任何名为 ITERATE 的东西” .

当您说“尝试查找 ITERATE 的定义”时,我猜您的意思是您在 (iterate ...) 中键入了 M-.缓冲区。问题是 SLIME 和 Emacs 不知道您指的是 nqthm.lisp 中定义的那个。我刚刚下载了一份 nqthm,它看起来相当陈旧,但看起来它在 USER 包中定义了迭代宏。您可以通过在 repl 中键入 (apropos "ITERATE") 来检查这一点。在 SBCL 中,您会看到几个 SBCL 特定的符号,但是(假设您已成功加载 nqthm.lisp,您还应该看到类似 USER:ITERATE 的内容。

从你的问题来看,我假设你是 lisp 的新手,所以我不会深入讨论包的技术细节。如果您只想能够在缓冲区中键入内容并让 Emacs 和 SLIME 做正确的事情来使用 nqthm 内容,我认为您应该能够放置

(in-package "USER")

在缓冲区的顶部并完成它。如果您希望 repl 也能正常工作,请将该字符串复制并粘贴到其中,或者在 repl 的缓冲区中使用 C-c M-p。

关于lisp - 遵循 lisp 代码库中的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23414867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com