Function 如何使用一个lisp文件中的函数来解决另一个lisp文件中的问题?

Function 如何使用一个lisp文件中的函数来解决另一个lisp文件中的问题?,function,emacs,common-lisp,Function,Emacs,Common Lisp,我是lisp新手,我的教授给了我一些.lisp文件供我使用 (搜索功能) (水壶问题另存为waterjug.lisp) 问题是我不知道如何实现从一个文件运行函数来解决另一个文件的问题。我所做的最多的工作是从一个文件中编译函数,并在终端中使用它。我不知道如何在这个IDE中加载2个文件以及如何运行该函数。例如,我试图运行广度优先搜索功能来解决这个问题,但没有效果 我目前正在使用emacs作为文本编辑器SBCL,作为常见的lisp实现以及quicklisp和slime。假设每个文件都在自己的缓冲区中,

我是lisp新手,我的教授给了我一些.lisp文件供我使用

(搜索功能)

(水壶问题另存为waterjug.lisp)

问题是我不知道如何实现从一个文件运行函数来解决另一个文件的问题。我所做的最多的工作是从一个文件中编译函数,并在终端中使用它。我不知道如何在这个IDE中加载2个文件以及如何运行该函数。例如,我试图运行广度优先搜索功能来解决这个问题,但没有效果


我目前正在使用emacs作为文本编辑器SBCL,作为常见的lisp实现以及quicklisp和slime。

假设每个文件都在自己的缓冲区中,比如说
f1.lisp
f2.lisp
,那么在每个缓冲区中只需调用
slime编译并加载文件。这在默认情况下绑定到C-C-k。您必须首先编译第一个文件,因为它包含第二个文件的定义

但是,您的第二个文件(
f2.lisp
)有两个问题:搜索
(break
(bread
)并删除这些字符串。检查它们周围的表单的括号是否平衡

编译文件时注意警告消息和错误。 然后,如果要直接从缓冲区计算某个内容,请将光标(点)放在要计算的表单之后,然后键入C-x C-e(假设光标由下面的
%
表示):

这将在小型缓冲区中打印结果,在您的示例中类似于
#
,它表示
JUG-STATE
类的一个实例。保持一个窗口对REPL缓冲区打开,以防函数向标准输出写入内容(这是
(下面描述…
表达式的情况)

如果改为使用C-C I,这将询问您要检查的表达式,该表达式已在点之前填充了表单。当您按enter键时,inspector缓冲区将显示:

#<JUG-STATE {1004BD8F53}>
--------------------
Class: #<STANDARD-CLASS COMMON-LISP-USER::JUG-STATE>
--------------------
 Group slots by inheritance [ ]
 Sort slots alphabetically  [X]

All Slots:
[ ]  FIVE = 0
[ ]  TWO  = 2

[set value]  [make unbound]
#
--------------------
类别:#
--------------------
按继承对插槽进行分组[]
按字母顺序对插槽排序[X]
所有插槽:
[]五=0
[]二=2
[设置值][使未绑定]

阅读。

谢谢你的指点和详细解释。这两个文件都是我的教授写的。我假设它应该是“break”而不是“break”,但你是说它甚至不应该在那里?还有一个关于解决问题本身的快速问题。我不能只通过先使用函数宽度搜索来解决问题,对吗?我必须编写一个新函数(例如solveWaterJug)哪一个包含bfs函数来解决它?@trungnt错误时有发生,即使是教授也会发生。我认为不应该出现错误,因为存在编译错误,而且这在视觉上很奇怪。我认为您的教授忘记删除用于调试的break语句。至于问题本身,您必须提供solver函数(不要使用camelCase,根据教授编写的辅助函数编写
解水壶
)。首先,一定要阅读并理解它们的作用。进行详尽的测试。
#<JUG-STATE {1004BD8F53}>
--------------------
Class: #<STANDARD-CLASS COMMON-LISP-USER::JUG-STATE>
--------------------
 Group slots by inheritance [ ]
 Sort slots alphabetically  [X]

All Slots:
[ ]  FIVE = 0
[ ]  TWO  = 2

[set value]  [make unbound]