标签: sbcl

在SBCL中使用步进器的一个简单示例

使用LispWorks步进器进行计算非常直观,但我无法在SBCL中找到它.有人可以给我一个如何在REPL中使用SBCL步进器的一些简单函数的分步示例吗?谢谢.

lisp debugging sbcl common-lisp stepper

15
推荐指数
1
解决办法
2694
查看次数

当CL程序作为shell脚本调用时如何使用quicklisp?

我目前在Common Lisp中有一个小程序,我希望它作为shell脚本运行.我正在使用SBCL并且完全没问题,所以我宁愿留在这个平台上.:)

我知道这个--script选项,除了(ql:quickload)形式,它完美无缺.

我的程序使用CL-FAD,它加载通过ql:quickload(我想我应该提到它是来自quicklisp的包加载函数).当脚本运行到评估时

(ql:quickload :cl-fad)
Run Code Online (Sandbox Code Playgroud)

形式,它打破了下一个错误:

package "QL" not found
Run Code Online (Sandbox Code Playgroud)

程序打包在单个源文件中,该文件具有以下标题:

(defpackage :my-package
  (:use :common-lisp)
  (:export :my-main-method))
Run Code Online (Sandbox Code Playgroud)

它是简单的自动化可执行文件,因此我决定(可能是错误的)不要编写任何ASDF系统.它导出单个函数,应该在没有任何参数的情况下运行.

对于这个程序,我目前正在尝试编写启动器脚本,这就是我正在盯着的:

#!/usr/bin/sbcl --script
(load "my-program.lisp")
(in-package :my-package)
(my-main-method)
Run Code Online (Sandbox Code Playgroud)

这三行(不包括shebang)是我想要自动化的.正如我在文档中看到的那样,使用这个shebang的脚本可以被称为简单./script.lisp,并且它确实这样做...具有之前描述的错误.

我需要在启动器中添加什么:cl-fad才能正确加载?文档说明使用--script选项SBCL不加载任何init文件,所以我真的需要复制行

#-quicklisp
(let ((quicklisp-init (merge-pathnames "systems/quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))
Run Code Online (Sandbox Code Playgroud)

(ql:add-to-init-file添加到.sbclrc),到我的启动器脚本?也许我的程序设置有一些深层的架构缺陷?

是的,当我输入我尝试在sbcl本身的REPL中自动化的行时,程序按预期运行.

shell automation sbcl common-lisp quicklisp

15
推荐指数
2
解决办法
3015
查看次数

SBCL标准库文档?

我想学习和使用SBCL,因为它易于学习和速度.(3年前我一直在和Lisp一起玩,现在我正在刷新它.)但是我如何才能了解标准库中包含的内容,以便我不重新实现?

在Python之后,这就像一场噩梦:SBCL网站有一本手册只涵盖了软件,而不是标准库上的一个词.(为了比较,Gnu Common Lisp的网站只有源代码和二进制文件.)

lisp documentation sbcl common-lisp standard-library

14
推荐指数
2
解决办法
3626
查看次数

(随机)Common Lisp不是随机的吗?

好的,最后的问题,我将在Common Lisp完成我的猜数游戏!:D无论何时游戏开始(或者在第一场比赛后开始新游戏),都会调用以下函数.

;;; Play the game
(defun play ()
    ;; If it's their first time playing this session,
    ;; make sure to greet the user.
    (unless (> *number-of-guesses* 0)
        (welcome-user))
    ;; Reset their remaining guesses
    (setq *number-of-guesses* 0)
    ;; Set the target value
    (setq *target*
        ;; Random can return float values,
        ;; so we must round the result to get
        ;; an integer value.
        (round
            ;; Add one to the result, because
            ;; (random 100) yields a number between
            ;; …
Run Code Online (Sandbox Code Playgroud)

lisp random sbcl common-lisp

14
推荐指数
1
解决办法
6776
查看次数

Common Lisp:Hunchentoot和REPL - 当我启动服务器时,我在REPL中得到日志输出,不能再使用REPL了

就像这里的一些问题,我是Lisp的新手.我正在阅读Practical Common Lisp一书,但是稍微看了一下设置一个Web应用程序是多么容易,所以我一直在关注这个教程,以及这里更新版本.

当我到达启动服务器的位置时,我的REPL就会死掉,然后我无法将任何东西推到服务器上*dispatch-table*.

所以基本上,我的代码在REPL中工作得很好,将对象添加到列表中,检索它们等等,然后我启动服务器使用

(setf *web-server* (start (make-instance 'hunchentoot:acceptor :port 8080)))
Run Code Online (Sandbox Code Playgroud)

哪个很好用,我可以访问它http://localhost:8080.但是当我访问它时,日志会打印到REPL,从那时起我无法实际使用REPL.例如,在Adam Petersen的帖子之后,我不能那么做

(push (create-prefix-dispatcher "/retro-games.htm" 'retro-games) *dispatch-table*)
Run Code Online (Sandbox Code Playgroud)

因为REPL没有反应.我尝试从不同的窗口(即从终端的SBCL)启动服务器但是它不知道我所处的上下文 - 它不理解我正在处理的包或我的任何代码.

我使用的是略微非标准的设置; 我在OSX上使用Sublime Text 2和SublimeREPL和SBCL(因为我真的没有进入Emacs和ST2很棒!).我描述我是如何把它一起在这里 -但我真的只张贴的以防万一,我会感到惊讶,如果它是我的设置造成的问题,而不是我失去了一些基本的东西.

无论如何,我知道我可以继续在更像生产的环境中设置hunchentoot,并且已经看到一些详细说明并远程访问REPL的帖子,但是我希望有一些更简单的东西可以解决我的问题.我错过了.

lisp sbcl common-lisp hunchentoot sublimetext2

14
推荐指数
1
解决办法
1064
查看次数

(Emacs)文字是只读的吗?

所以我在emacs工作,突然,slime-repl sbcl说文本是只读的.那很好,因为现在我不能输入任何东西.我该如何解决?

lisp emacs sbcl slime

14
推荐指数
3
解决办法
4504
查看次数

应对Common Lisp(SBCL)中的内存使用并将其最小化

我有一个没有太多内存(256Mb)的VPS,我试图使用SBCL + Hunchentoot进行Common Lisp开发来编写一些简单的web应用程序.大量的内存似乎在没有做任何特别复杂的事情的情况下被使用,并且在服务页面一段时间后,内存耗尽并且使用所有交换或者(如果没有交换)就会死掉.

所以我需要帮助:

  • 找出使用所有内存的内容(如果它是库或我,尤其是)
  • 限制SBCL允许使用的内存量,以避免大量的交换
  • 当内存耗尽时,处理干净的东西,而不是崩溃(因为它是一个web-app,我希望它继续并尝试清理).

我假设前两个是相当简单的,但第三个甚至可能吗?人们如何处理Lisp中的内存不足或受限制的内存条件?

(另外,我注意到64位SBCL似乎使​​用的内存是32位的两倍.这是预期的吗?我可以运行32位版本,如果它会节省大量内存)

lisp memory sbcl common-lisp out-of-memory

13
推荐指数
2
解决办法
4085
查看次数

为什么LISP defun在参数参数之前不需要引用?

采取这个功能:

(defun sum-greater (x y z)
 (> (+ x y) z))
Run Code Online (Sandbox Code Playgroud)

我的理解是,在LISP中,列表中的第一个元素始终表示要在后续原子/列表上执行的函数.那么为什么LISP不将xin (x y z)作为一个函数来对待y和执行z.显然,这不是理想的行为,但这将是预期的行为.

据推测,defun以某种方式定义的函数会覆盖列表的标准LISP评估?如果是这样,你能详细说明吗?

谢谢

lisp sbcl common-lisp

13
推荐指数
2
解决办法
967
查看次数

从终端命令提示符运行Common Lisp函数

我很难找到答案,所以也许这是不可能的.我希望能够灵活地从命令行加载/编译lisp文件,即不在emacs内部,然后还可以从命令行运行该文件中的一个lisp函数.这无疑是实现特定的功能,因此任何提供此功能的实现的指针(或者它可能是相当标准的,我不知道).我正在使用SBCL并喜欢它,所以如果可以做到这一点会很棒.

我也在使用Mac OSX和终端.

lisp sbcl common-lisp

13
推荐指数
2
解决办法
3万
查看次数

了解SBCL进/出装配锅炉板代码

背景

在Windows上使用64位Steel Bank Common Lisp进行简单的身份识别时:

(defun a (x)
   (declare (fixnum x)) 
   (declare (optimize (speed 3) (safety 0))) 
  (the fixnum x))
Run Code Online (Sandbox Code Playgroud)

我发现反汇编如下:

* (disassemble 'a)

; disassembly for A
; Size: 13 bytes
; 02D7DFA6:       84042500000F20   TEST AL, [#x200F0000]      ; safepoint
                                                              ; no-arg-parsing entry point
;       AD:       488BE5           MOV RSP, RBP
;       B0:       F8               CLC
;       B1:       5D               POP RBP
;       B2:       C3               RET
Run Code Online (Sandbox Code Playgroud)

我理解的是:

mov rsp, rbp
pop rbp
ret  
Run Code Online (Sandbox Code Playgroud)

从函数操作执行标准返回,但我不明白为什么有这些行:

TEST AL, [#x200F0000]  // My understanding is that this …
Run Code Online (Sandbox Code Playgroud)

lisp assembly sbcl common-lisp

12
推荐指数
2
解决办法
945
查看次数