问题标签 [gnu-common-lisp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
607 浏览

lisp - 当它们相邻时加快删除重复项

我正在寻找类似的东西#'delete-duplicates,但我知道列表中的所有元素都已经排序,或者反向排序,或者至少排列使得重复项已经彼此相邻。我希望利用这些知识来确保执行速度与列表中元素数量的平方不成比例。#'maplist用它来发展我自己的解决方案是微不足道的,但是语言中已经有一些东西了吗?重新发明轮子会很尴尬。

需要明确的是,对于较大长度的列表,我希望删除的运行时间与列表的长度成正比,而不是与该长度的平方成正比。这是我希望避免的行为:

0 投票
1 回答
116 浏览

lisp - 收集`time`宏产生的时空结果?

Common Lisp 提供了一个time宏来找出一个表单需要多长时间执行,并将信息打印到跟踪输出:

time评估当前环境中的形式(词汇和动态)。... time打印各种计时数据和其他信息以跟踪输出。打印信息的性质和格式是实现定义的。鼓励实现提供诸如经过的实时、机器运行时间和存储管理统计等信息。

例如:

有没有办法收集这些参数并将它们逐步推送到某个堆栈或列表中并从函数中返回?

0 投票
1 回答
336 浏览

common-lisp - 在 GCL 中强制垃圾回收

我在 Maxima 中编写了一个程序(将其翻译为 lisp,因为它在 lisp 之上运行)逐步求解方程。我想表明,如果不可能将所有方程加载到 RAM 中并同时求解,那么可以加载其中的少数几个,并且我们可以逐步添加更多并使用先前求解的方程的解来获得更多新解添加方程。

我的程序运行良好。但问题是,如果我需要证明我的方法将节省 RAM,那么我需要在解决新的方程组之前运行 GC,以便我可以看到我正在使用的最小内存,而目前编译器似乎没有自动进行 GC,因此它显示用于完整操作的聚合内存。

我正在使用Lisp 实现版本:GCL 2.6.8。

我需要知道如何强制垃圾收集或更有效的方法有人可以建议,以防无法在 lisp 中强制 GC(我找不到方法)。

0 投票
1 回答
43 浏览

common-lisp - Why does GCL immediately die when I try to start it?

Why does GCL (GNU Common Lisp) immediately die when I try to start it?

How do I fix it?

0 投票
2 回答
130 浏览

shell - 从命令行启动 Lisp 程序时如何指定包名?

我正在从一个 shell 脚本调用一个 Lisp 函数(以及其他一些东西)。为简洁起见,以下是脚本的相关部分:

./gcl -load /tmp/calendrica-3.0.cl -batch -eval '(格式 T "~a" (CC3::sunset (CC3::fixed-from-gregorian (CC3::gregorian-date 1996 CC3:: 2 月 25 日)) CC3::jerusalem))' 728714.7349874675

上面的代码工作正常,但我必须为每个使用的符号附加包名 CC3;这使得代码笨拙且难以键入。

我试图像这样简化它,使用use-package

./gcl -load /tmp/calendrica-3.0.cl -batch -eval '(format T "~a" (use-package "CC3") (sunset (fixed-from-gregorian (gregorian-date 1996 february 25))耶路撒冷))'

更容易阅读和输入,但不幸的是它不起作用。我已经尝试了各种方法来包含该use-package指令,但到目前为止还没有成功。

通过 GNU Common Lisp (gcl) 的加载指令启动 Lisp 程序时甚至可以包含use-package指令吗?

更新: 解决方案是按照接受的答案的建议使用多个评估。

./gcl -load /tmp/calendrica-3.0.cl -batch -eval '(use-package "CC3")' -eval '(format T "~a" (sunset (fixed-from-gregorian (gregorian-date 1996 2 月 25 日))耶路撒冷))”

0 投票
2 回答
185 浏览

lisp - CONS 对象可以用作哈希表的键吗?

我最近一直在玩 LISP,我想尝试通过缓存它的输出来优化效率非常低的递归函数,因此它只运行每个参数组合一次。我想将结果保存到哈希表中,使用其中一个(LIST a b)(CONS a b)作为键。我的问题是,这可能吗?我读过的文档会让我相信它是,因为我读过的文档将 定义key为“对象”,并将“对象”定义为用cons. 所以我试了一下。

它给了我NIL,当我期望的时候123。如果我用 a 替换(list 1 2)cons仍然不起作用,但是当我使用普通整数时,它工作正常。

我正在使用 GCL 2.6.12

0 投票
1 回答
150 浏览

lisp - Common Lisp:使用 readtable-case 出现错误

当我在 REPL 提示符下输入:

我收到此错误消息:

为什么我会收到此错误?

0 投票
2 回答
1834 浏览

ubuntu - 包 GCL 和 CLISP 有什么区别?

在 Ubuntu 存储库中有两种 Lisp 实现:GCL 和 CLISP。它们之间有根本区别吗?哪个更接近行业标准?

0 投票
1 回答
140 浏览

recursion - 用尾递归解决“n-rooks”

我试图用尾递归解决 n rooks 问题,因为它比标准递归更快,但我无法弄清楚我们如何让它全部工作。我查找了这个问题背后的理论,发现解决方案是由一个叫做“电话号码”的东西给出的,它由以下等式给出:

电话/N-rooks 关系

其中 T(1) = 1 和 T(2) = 2。

我创建了一个递归函数来评估这个方程,但它只能在 T(40) 之前快速工作,我需要它来计算 n > 1000 的位置,目前据我估计需要数天的计算时间。

尾递归似乎是我最好的选择,但我希望这里有人可能知道如何使用尾递归来编程这种关系,因为我不太了解它。

我在 LISP 工作,但愿意使用任何支持尾递归的语言

0 投票
1 回答
125 浏览

macros - Lisp:在宏中扩展属性名称

考虑这个属性列表:

这个简单的调用:

产量"fooval"符合预期。我定义了一个宏,它应该做同样的事情,除了我可以传递任何属性的名称来检索:

不幸的是,这样称呼它:

结果FOO。为什么?