小编Mad*_*ist的帖子

在Common Lisp中使用循环宏的嵌套循环

我试图在CL中实现一个基本的嵌套循环,但Loop宏正在抵制这个.基本上,我想找到所有可能的3位数字产品,并将它们累积到一个列表中.

这是我的尝试:

 (loop for x downfrom 999 to 998 do (loop for y downfrom 999 to 998 collect (* x y)))
Run Code Online (Sandbox Code Playgroud)

上面的代码NIL由于某种原因返回.顺便说一句,我意识到我只跑到998,但这是为了测试目的.

我该怎么做才能获得这样的列表:

(999*999 999*998 ... 998*998 998*997 ... 997*997 997*996 ... 100*100)

lisp macros loops nested common-lisp

2
推荐指数
1
解决办法
1989
查看次数

Common Lisp包中的外部符号与内部符号

它们在Common Lisp包的上下文中有什么区别?我正在阅读SLIME文档,一些命令广泛提及.

lisp sbcl common-lisp package

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

每次重新启动时都必须重新安装Quicklisp软件包

我正在编写一个(SBCL)Common Lisp程序,该程序在文件顶部具有以下行:

(defpackage :my-package
  (:use :cl :cl-who :hunchentoot :parenscript))
Run Code Online (Sandbox Code Playgroud)

我在MacOS上运行Emacs 25,SBCL和SLIME。

每当我评估上面的行时,总会首先收到此错误:

名称“ CL-WHO”不指定任何软件包。[SB-KERNEL类型的条件:SIMPLE-PACKAGE-ERROR]

然后,我运行(ql:quickload "cl-who")并观看CL-WHO软件包的安装。对于其他两个包,我重复一遍。一旦完成此操作,就可以成功评估表单。

问题是,每次我重新启动Emacs(或Lisp进程,在这种情况下我都认为大致相同)时,都需要这样做。为什么当我使用Quicklisp安装某些东西时,下一个会话没有“记住”它?难道我做错了什么?

这是配置问题还是对它应该如何工作的普遍误解?

sbcl common-lisp quicklisp

2
推荐指数
1
解决办法
346
查看次数

Common Lisp No Dispatch Character Defined

我目前正在阅读Paul Graham的"On Lisp"一书中关于读时宏的章节.

我遇到的问题如下.当我运行他的一个例子时:

(set-dispatch-macro-character #\# #\?
  #’(lambda (stream char1 char2)
    ‘#’(lambda (&rest ,(gensym))
       ,(read stream t nil t))))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

No dispatch function defined for #\’
Run Code Online (Sandbox Code Playgroud)

为什么会这样?可能是因为我在REPL上运行它吗?有什么可以解决它?

syntax common-lisp reader-macro

2
推荐指数
1
解决办法
107
查看次数

连接列表并将结果返回到第一个参数

我想知道在 Common Lisp 中做这样的事情最有效(算法)和可读的方式是什么:

(setq result-list (append result-list small-list))
Run Code Online (Sandbox Code Playgroud)

也就是说,是否有类似的东西(append-destructively result-list small-list)可以确保result-list包含连接列表?

我这样做是为了提高可读性,但是在(功能性)编程实践方面,这是一个好主意吗?

functional-programming list concatenation append common-lisp

2
推荐指数
1
解决办法
103
查看次数

在Common Lisp中将变量列表评估为值列表

我想知道如何实现以下目标。假设我有一个受let上述约束的变量列表。我想将此列表转换为这些变量绑定到的值的列表。

也就是说,假设我们有

(define make-plist-from-variables (variables)
  (let ((keys variables)
        (values (mapcar #'identity variables)))
    (if (eq (length keys) (length values))
     (make-plist keys values)
     nil))))
Run Code Online (Sandbox Code Playgroud)

我可以用什么来#'identity正确解压这些值?

目前,以下调用将产生以下输出。

CL-USER> (let ((a 2) (b 3)) (make-plist-from-variables '(a b)))
(A A B B)
Run Code Online (Sandbox Code Playgroud)

我希望成为 (A 2 B 3)

common-lisp

2
推荐指数
1
解决办法
56
查看次数

管理Common Lisp中的依赖关系

我从Python世界来到Lisp,它基本上运行virtualenvpip作为创建容器和管理依赖项的方式.

目前,我正在更详细地学习Common Lisp,并想知道它的社区理念是如何管理依赖关系和包.

例如,如果我运行:

(ql:quickload '(cl-who hunchentoot parenscript elephant fiveam css-lite cl-json))

据我所知,所有这些软件包都将安装在quicklisp目录中的某个位置.(我不确定它们的安装形式或位置).

问题是,是否有必要安装不同版本的软件包,具体取决于手头的代码.也就是说,那个人做了什么?他只是依靠包的向后兼容性吗?

Common Lisp世界如何处理这个问题?

lisp python common-lisp dependency-management quicklisp

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

内存 Common Lisp 中的对象地址

我试图弄清楚像 SLIME 或 SLY 这样的软件如何在 Inspector 中显示变量时获取变量的内存地址。我可以使用什么 Common Lisp 函数来以编程方式执行此操作?

例子:

在此处输入图片说明

这是#x100cab066d1这里感兴趣的。

sbcl common-lisp allegro-cl

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

破坏常见Lisp中的结构或类

我想知道用于销毁defstructCommon Lisp中通过创建的结构的选项是什么。似乎自动提供了一个构造函数。但是,析构函数并非如此。

可以从内存中“清除”结构的方法有哪些?(setq my-struct NIL)我会想到类似的事情,但是我不确定这是否是最干净的方法?

编辑:

当我尝试测试如果我使用结构作为键将某个东西键入哈希表,然后销毁该结构时,会出现问题。哈希表中的键会发生什么?我想这更多是关于如何实现哈希表的问题。

lisp garbage-collection common-lisp data-structures

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

常见的Lisp防御性价值观副本

我想知道在Common Lisp中是否有内置的方法可以对值列表类型进行防御性复制。据我了解,该列表不是常规列表,而是某种保留类型。

我想一种解决方案是将其转换为适当的列表,对其进行复制,然后将其转换回值列表。但是,我不确定最有效的方法。

任何帮助表示赞赏。

lisp common-lisp

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