标签: sbcl

如何使用quicklisp安装的软件包?

我使用quicklisp安装了CL-PNG软件包.

(ql:quicklisp 'png)
Run Code Online (Sandbox Code Playgroud)

现在我想定义自己的包,这取决于CL-PNG包.像这样:

(defpackage :FOO
  (:use :CL :PNG)
  (:export :BAR))
Run Code Online (Sandbox Code Playgroud)

编译时我收到此错误:

The name "PNG" does not designate any package.
   [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]
Run Code Online (Sandbox Code Playgroud)

(require :PNG)在编译我的包之前,我似乎必须调用REPL.

如何在不手动调用requireREPL的情况下为编译器提供CL-PNG包,我该怎么办?

更新:我正在使用SBCL.

lisp packages sbcl common-lisp quicklisp

12
推荐指数
1
解决办法
3597
查看次数

演变lisp图像

我喜欢基于图像的语言的想法,最近我一直在通过sbcl玩弄Common Lisp.我已经在几个地方读到了如何通过保存和加载虚拟机的映像,您可以改进在该映像上运行的应用程序或一组应用程序.

我得到了如何将代码加载到图像中并使其运行,slime使这种事情非常好,但我的问题是:如何判断图像中定义了哪些函数?假设我想在运行后几天或几个月对某个功能进行更新,我记不起名字了.有没有办法获得代码甚至只是图像中定义的函数的名称?

现在,我将代码写入源代码并通过repl加载,所以我有一个副本,但似乎这是一个明显的功能.

sbcl common-lisp

11
推荐指数
2
解决办法
1038
查看次数

如何自定义SBCL REPL?

有没有办法以某种方式自定义SBCL REPL,使其与CLISP REPL类似.标准的SBCL REPL在Mac OS X上并不真正可用.我不能使用箭头键或退格键.

sbcl common-lisp read-eval-print-loop

11
推荐指数
3
解决办法
2713
查看次数

如何在Steel Bank Common Lisp中处理输入和输出流?

我正在试图弄清楚如何使用我开始的一个程序的输出流,RUN-PROGRAM因此它可以用作另一个程序的输入RUN-PROGRAM(即道德,也许是文字等效的管道).我已经使用了一些组合的尝试:INPUT,:OUTPUT:WAIT关键字参数,但没有我打后一直生产至今.任何提示都会有所帮助; 例如,我将如何ls | grep lisp从shell中做一些事情?

我的一个尝试是

(defun piping-test () 
  (let ((grep-process (run-program "/usr/bin/grep" '("lisp") 
                                  :input :stream 
                                  :output :stream))) 
    (unwind-protect 
        (with-open-stream (s (process-input grep-process)) 
          (let ((ls-process (run-program "/bin/ls" '() 
                                        :output s))) 
            (when ls-process 
              (unwind-protect 
                  (with-open-stream (o (process-output grep-process)) 
                   (loop 
                      :for line := (read-line o nil nil) 
                      :while line 
                      :collect line)) 
               (process-close ls-process))))) 
     (when grep-process (process-close grep-process))))) 
Run Code Online (Sandbox Code Playgroud)

在SLIME REPL中运行它会导致一切都挂起,直到我打破C-c C-c,所以它显然不是正确的事情,但我不知道如何改变它所以它是正确的.

编辑:添加:WAIT NIL到两个RUN-PROGRAM调用,或仅添加到调用grep …

lisp sbcl common-lisp

10
推荐指数
1
解决办法
3237
查看次数

常见的lisp emacs上的自动缩进+ windows中的slime + sbcl

我定义我的函数等时,我不能在emacs + slime + sbcl上使用自动缩进功能.

我的.emacs文件配置是这样的:

(setq inferior-lisp-program
"D:/emacs/sbcl_1.0.37/sbcl.exe"
      lisp-indent-function 'common-lisp-indent-function
      slime-complete-symbol-function 'slime-fuzzy-complete-symbol
      slime-startup-animation nil
      slime-enable-evaluate-in-emacs t
      slime-log-events t
      slime-outline-mode-in-events-buffer nil
      slime-repl-return-behaviour :send-only-if-after-complete
      slime-autodoc-use-multiline-p t
      slime-highlight-compiler-notes t)

(add-to-list 'load-path
 "d:/emacs/site-lisp/slime")  ; your SLIME directory
(require 'slime)
(slime-setup)
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?

lisp windows sbcl common-lisp slime

10
推荐指数
1
解决办法
2386
查看次数

"你的小猫等待"来自哪里?

如果您运行SBCL(至少在Windows上,我在家中使用CLISP),您会收到消息"您的死小猫等待".我怀疑这与某种形式的内幕笑话有关(比如Super Cow Powers).我已经尝试了谷歌搜索,我发现没有什么特别有用的(我想它在其他地方提到的'网络是一些,如果不是很多,使用).

如果这看起来更像是SuperUser或ServerFault问题,请告诉我,我会在他们的论坛上提问.


更新:

似乎这个引用的起源是由Christopher Rhodes 提交到原始来源的1.54版本(感谢Daniel A. White找到了这个名字).我不确定这是否有用,但它是一个额外的途径来接近这个查询.

windows sbcl

10
推荐指数
1
解决办法
1097
查看次数

Steel Bank Common Lisp&Slime的最大调试信息

初始化Lisp会话(我使用Slime和sbcl)的最佳方法是什么,总是使用最大量的调试信息编译函数?

lisp sbcl common-lisp slime

10
推荐指数
1
解决办法
1253
查看次数

编写从命令行执行但不在解释器内执行的Common Lisp代码

在编写Common Lisp代码时,我使用SLIME.特别是,我使用CC Ck编译包含函数定义的缓冲区,然后切换到REPL以运行这些函数.将可执行代码放在缓冲区中运行这些函数似乎不能很好地工作.如果代码有错误,它可能会弄得一团糟.

有一种方法可以包含不在缓冲区中编译的代码,但是可以从命令行运行,例如在执行时

sbcl --script foo.lisp
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,每次我想从命令行运行代码时,我都不必继续添加和删除代码.是否存在这样的情况?

这类似于Python条件.

if __name__=='__main__':
Run Code Online (Sandbox Code Playgroud)

如果将Python文件作为模块导入,则为false;如果将其作为脚本运行,则为true.

这篇由Googling随机发现的题为"使用SBCL for Common Lisp shell脚本"的博文有

;; If run from command line, the following if-test will succeed

(if (> (length sb-ext:*posix-argv*) 1)

    ;; Code that is executed from the command line only goes here

)
Run Code Online (Sandbox Code Playgroud)

包含的代码确实不会被SLIME中的编译器运行,但它也不会被运行sbcl --script.

更新:感谢Vsevolod Dyomkin的有用答案和后续行动.关于该答案的一些注释如下,从对该答案的评论中汇编而成.@Vsevolod,如果你将这些添加到你的答案中,我会删除它们.

  1. 首先,我问了一种从命令行运行代码的方法,但不是从解释器运行代码.提供的解决方案做得更多; 它还提供了一种从解释器而不是命令行运行代码的方法.

  2. 第一步是为宏字符定义一个阅读器宏功能#!.如链接"在遇到宏字符时,Lisp读者调用其读取器宏函数"中所述.读者功能由调用来定义set-dispatch-macro-character.因此,当#!看到该字符时,set-dispatch-macro-character会导致调用正文中定义的lambda函数.然后,此函数将关键字添加:noscript*features*变量中.另请参阅讨论哪些读取器宏在SO问题中 有用.阅读宏:您使用它们是什么?.

  3. 观察到关键字:noscript*features*#!角色存在时精确添加的.此外,#! …

command-line sbcl common-lisp slime

10
推荐指数
2
解决办法
2313
查看次数

SBCL:将Hunchentoot应用程序部署为可执行文件

我开始使用SBCL Common Lisp并希望使用Hunchentoot开发一个小型Web应用程序.为了便于部署,我计划使用sb-ext:save-lisp-and-die将所有内容保存在二进制文件中,因为我可以使用大输出大小.

对于可执行文件,您需要提供顶级功能.问题是当顶级函数返回时程序退出.我试图从可执行文件启动Hunchentoot,但程序在两秒后结束.

在停止程序之前,我怎么能等到Hunchentoot关闭(从请求内部)?我可以加入Hunchentoot接受器线程吗?或者我甚至可以将REPL包含在可执行文件中以便能够进行实时调试?

executable sbcl common-lisp hunchentoot

10
推荐指数
1
解决办法
731
查看次数

什么是在Emacs和SLIME中调试Common Lisp的有效方法?

我想知道使用Emacs和SLIME以交互方式调试Common Lisp的有效方法是什么.

我之前做过的事情:作为使用IDE(VS和PyCharm)学习C和Python的人,我习惯于设置断点,添加手表,然后踩踏.但是当我开始使用CL时,我发现调试工作流程根本不同.我没有找到设置断点的好方法,通过线条查看变量如何变化.

我使用的哑方法是在代码中添加"print"并反复运行代码,效率非常低.我知道我们可以"检查"SLIME中的变量,但不知道如何以交互方式进行.

我发现的内容:我最近看到了关于摩尔斯电码转换器开发的视频,它展示了如何在SLIME中以交互方式进行调试的完整过程,这一过程非常丰富,具有启发性.就好像我们可以与编译器"交谈"一样.

我想要的是:我在网上搜索但找到了最小的教程,展示了经验丰富的Lisper如何实际开发和调试他们的程序.我渴望学习这样的经历.

  • 如何交互式调试?
  • 有哪些好的做法和提示?如何添加断点和步骤?
  • 您最常使用哪些快捷方式/工具/工作流/在调试时最有用?

debugging emacs sbcl common-lisp slime

10
推荐指数
1
解决办法
2059
查看次数