标签: sbcl

SBCL初始化文件

我想知道我应该在哪里保存.sbclrc文件.我尝试将其保存在我的.sbcl文件夹中,但它似乎没有工作.我正在使用Windows XP和Emacs版本23.

我正在尝试设置asdf-install,这就是为什么我在使用初始化文件.

谢谢你的时间.

lisp emacs sbcl

9
推荐指数
1
解决办法
1198
查看次数

如何更改SBCL的当前目录?

这是容易改变CLISP的当前工作目录:

>cat ~/.clisprc.lisp 
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
  (load quicklisp-init)))

(cd "/media/E/www/qachina/db/doc/money")
(load "money")
Run Code Online (Sandbox Code Playgroud)

但是,似乎cd在SBCL中没有类似的功能.如何用SBCL完成这项工作?

clisp sbcl common-lisp

9
推荐指数
5
解决办法
6935
查看次数

对SBCL中的``ql:quickload``和可执行脚本感到困惑

我一直在尝试在我的可执行脚本中使用Quicklisp包.一个(平凡的)工作示例是:

#!/usr/bin/sbcl --script

(eval-when (:compile-toplevel :load-toplevel :execute)
  (ql:quickload "lisp-unit")) ;as explained by another question

(defpackage :test
  (:use :cl :lisp-unit))

(format t "This is a test.")
Run Code Online (Sandbox Code Playgroud)

chmod使用此代码(调用test.lisp)的文件后,我尝试执行它.但是,我收到以下错误消息:

Unhandled SB-C::INPUT-ERROR-IN-LOAD in thread #<SB-THREAD:THREAD
                                            "main thread" RUNNING
                                             {1002C16923}>:
  READ error during LOAD:

    Package QL does not exist.

      Line: 4, Column: 15, File-Position: 95

      Stream: #<SB-SYS:FD-STREAM
            for "file /home/koz/Documents/Programming/CL/trees/test.lisp"
            {1002C19A93}>

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1002C16923}>
0: ((LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX))
1: (SB-IMPL::CALL-WITH-SANE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX) {1002C2498B}>) …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp quicklisp

9
推荐指数
1
解决办法
4928
查看次数

长整数到字符串,反之亦然,用数字操作

解决Euler项目问题​​我得到的是我需要使用长数字的数字作为字符串进行操作.我使用sbcl在linux,emacs,slime中工作.

例如,为了得到这个数字2的数字之和,我这样工作,

1)获得力量

CL-USER> (defparameter *answer-as-integer* (expt 2 1000))
*ANSWER-AS-INTEGER*
CL-USER> *ANSWER-AS-INTEGER*
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Run Code Online (Sandbox Code Playgroud)

感谢Common Lisp,这非常简单.现在我相信一个好方法应该是将reduce应用于这个数字序列.

2)获取字符串

CL-USER> (defparameter *answer-as-string* (write-to-string *ANSWER-AS-INTEGER*))
*ANSWER-AS-STRING*
CL-USER> *ANSWER-AS-STRING*
"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376" 
Run Code Online (Sandbox Code Playgroud)

现在我有了序列,所以应用reduce,但是我得到错误的东西:这是一个char所以我将转换字符应用于整数:

CL-USER> (reduce #'(lambda (x y) (+  (digit-char-p x)  (digit-char-p y))) *ANSWER-AS-string*)
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

The value 1 is not of type CHARACTER.
   [Condition of type TYPE-ERROR]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [*ABORT] Return to SLIME's top level.
 2: [ABORT] Abort thread (#<THREAD "repl-thread" RUNNING {1005DE80B3}>)

Backtrace:
  0: (DIGIT-CHAR-P 1) [optional]
  1: ((LAMBDA …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp

9
推荐指数
2
解决办法
269
查看次数

有没有办法让sbcl打印出CPU寄存器的值?

有没有办法让SBCL在我的程序中的某一点获取CPU寄存器的值并将其打印为整数?

我必须使用gdb吗?

assembly x86-64 sbcl common-lisp cpu-registers

8
推荐指数
1
解决办法
1079
查看次数

Common Lisp:为什么我的尾递归函数导致堆栈溢出?

我在理解Common Lisp函数的性能时遇到了问题(我仍然是新手).我有这个函数的两个版本,它只是计算所有整数的总和n.

非尾递归版:

(defun addup3 (n) 
  (if (= n 0)
    0   
    (+ n (addup (- n 1)))))
Run Code Online (Sandbox Code Playgroud)

尾递归版:

(defun addup2 (n) 
  (labels ((f (acc k)
              (if (= k 0)
                   acc 
                   (f (+ acc k) (- k 1)))))
  (f 0 n)))
Run Code Online (Sandbox Code Playgroud)

我试图在输入CLISP中运行这些函数n = 1000000.这是结果

[2]> (addup3 1000000)
500000500000
[3]> (addup2 1000000)

*** - Program stack overflow. RESET
Run Code Online (Sandbox Code Playgroud)

我可以在SBCL中成功运行,但非尾递归的更快(只有一点点,但这对我来说似乎很奇怪).我已经搜索了Stackoverflow问题的答案,但找不到类似的东西.为什么我的堆栈溢出虽然尾递归函数被设计为不将所有递归函数调用放在堆栈上?我是否必须告诉解释器/编译器优化尾调用?(我读过类似(proclaim '(optimize (debug 1))设置调试级别并以追踪能力为代价进行优化的内容,但我不知道这是做什么的).也许答案是显而易见的,代码是胡说八道,但我无法弄清楚.感谢帮助.

编辑:danlei指出了拼写错误,它应该是addup3在第一个函数中调用,所以它是递归的.如果纠正,两个版本都会溢出,但不是他的版本

(defun addup (n) 
         "Adds up the first N integers"
         (do ((i …
Run Code Online (Sandbox Code Playgroud)

clisp tail-recursion sbcl common-lisp

8
推荐指数
2
解决办法
5170
查看次数

使用不同的lambda列表重新定义泛型函数

我犯了一个错误,忘记在defgeneric我第一次编译它时指定关键字参数.现在我真的不想重新启动SLIME来重新定义这个defgeneric以包含更多参数.有没有办法以某种方式"取消定义"它?

哦,对不起,没关系,在删除为该通用定义的所有方法之后,SBCL重新定义了它,所以它现在都很好:

(remove-method #'some-generic 
  (find-method #'some-generic '() (list of method types)))
Run Code Online (Sandbox Code Playgroud)

对于后代.

sbcl common-lisp slime

8
推荐指数
2
解决办法
618
查看次数

在MacOS上SLIME下的cl-opengl崩溃了SBCL ...... bug?

我想在Emacs和SLIME下的Common Lisp中做一些O​​penGL编程.我没有参与其中,但我目前正在尝试使用SBCL.如果我从一开始就打开emacs,只用这一行创建一个新文件:

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

然后我做M-x slime(并等待加载),然后C-c C-c编译并运行该行,SBCL每次都崩溃,每次都会提示一个对话框说sbcl quit unexpectedly:

错误对话框:sbcl意外退出

我通过点击"报告..."按钮保存了可访问的输出; 如果那是有用的,我可以在这里添加(或将它放在pastebin或其他东西上)......简短的版本是它得到了SIGTRAP.

每次我尝试在SLIME下运行时都会发生这种情况......但是,有趣的是,如果我从命令行运行SBCL,则不会发生这种情况.

所以,问题是:这是SBCL中的错误吗?在cl-opengl?我错误配置的东西?其他?任何见解将不胜感激.


注意:

我做了一些谷歌搜索,我找到了一个页面,提供了将以下内容放入的解决方法~/.swank.lisp:

(setf swank:*communication-style* :fd-handler)
Run Code Online (Sandbox Code Playgroud)

事实上,这让我超越了直接的崩溃,让我能够做一些工作.如果这只是答案,有人请将其作为答案发布,并解释为什么要这样做,以便其他人可以找到它.否则,我想象这是一个错误,但是,这可能是固定的,而不是解决...和/或至少我可以帮助更好地理解的东西; 我仍然没有响应的REPL与我当前的代码(基本上在brian的大脑,作为测试用例)运行(通过run),这可能是也可能不是一个单独的问题?改变swank配置改变了我的情况吗?


平台细节:

操作系统:MacOS 10.6.8

SBCL:来自MacPorts的sbcl@1.1.10_0+fancy ; launch header 这是SBCL 1.1.10,ANSI Common Lisp的一个实现.

Emacs:macports安装的Emacs 版本24.3(9.0)(根据窗口的GUI,或者2013-04-07每个的GNU Emacs 24.3.1(x86_64-apple-darwin10.8.0,NS apple-appkit-1038.36)M-x version,或者emacs-app@24.3_1端口)

史莱姆:来自MacPorts的史莱姆@ 20130630

opengl sbcl common-lisp slime

8
推荐指数
1
解决办法
451
查看次数

如何将buildapp与quicklisp结合使用

我想使用buildapp来生成curl-lisp可执行文件作为示例:

buildapp --output lisp-curl --asdf-path ~/src/clbuild/systems/ \
    --load-system drakma \
    --eval '(defun main (args) (write-string (drakma:http-request (second args))))' \
    --entry main
Run Code Online (Sandbox Code Playgroud)

这绝对不会起作用,因为我没有路径"〜/ src/clbuild/systems /",因为我使用quicklisp我的系统应该在"〜/ quicklisp/dists/quicklisp/software",但是当我执行时:

buildapp --output lisp-curl  \
         --asdf-path ~/quicklisp/dists/quicklisp/software      \
         --load-system drakma     \
         --eval '(defun main (args) (write-string (drakma:http-request (second args))))'   \
         --entry main

; file: /home/simkoc/dumper-YKYna1b3.lisp
; in: DEFUN DUMP-FILE-DEBUGGER
;     (QUIT :UNIX-STATUS 111)
; 
; caught STYLE-WARNING:
;   SB-EXT:QUIT has been deprecated as of SBCL 1.0.56.55. Use SB-EXT:EXIT or
;   SB-THREAD:ABORT-THREAD instead.
;   
; …
Run Code Online (Sandbox Code Playgroud)

sbcl common-lisp quicklisp

8
推荐指数
1
解决办法
1292
查看次数

如何使用SBCL正确保存Common Lisp图像?

如果我想创建一个程序的Lisp图像,我该如何正确地完成它?有先决条件吗?它不和QUICKLISP很好地搭配吗?

现在,如果我启动SBCL(只预装了QUICKLISP)并保存图像:

(save-lisp-and-die "core")
Run Code Online (Sandbox Code Playgroud)

然后尝试使用此图像再次启动SBCL

sbcl --core core
Run Code Online (Sandbox Code Playgroud)

然后尝试做:

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

我得到以下内容:

To load "cl-yaclyaml":
  Load 1 ASDF system:
    cl-yaclyaml
; Loading "cl-yaclyaml"
.......
debugger invoked on a SB-INT:EXTENSION-FAILURE in thread
#<THREAD "main thread" RUNNING {100322C613}>:
  Don't know how to REQUIRE sb-sprof.
See also:
  The SBCL Manual, Variable *MODULE-PROVIDER-FUNCTIONS*
  The SBCL Manual, Function REQUIRE

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RETRY                        ] Retry completing load for …
Run Code Online (Sandbox Code Playgroud)

dump sbcl common-lisp quicklisp

8
推荐指数
1
解决办法
1551
查看次数