问题标签 [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.
lisp - 各种 ANSI CL 实现有何不同?
当我开始从 Practical Common Lisp 学习 CL 时,正如书中所宣扬的那样,我从 Allegro CL 编译器开始。我停止使用它,因为它的商业性但免费的部分并没有给我留下深刻印象。它需要连接到其远程服务器以获取一些许可。
我切换到“clisp”并正在使用它。现在,我一直听说 SBCL 并计划开始使用它。
所以,问题是:各种 ANSI CL 实现有何不同?有任何使用其中一个的实际经验吗?
谢谢你。
enums - Common Lisp 等价于 C 枚举
我最近正在尝试学习一些 Lisp(Common Lisp),我想知道是否有一种方法可以像在 C 中通过枚举那样为常数命名。
我不需要枚举的完整功能集。最后,我只想拥有快速且可读的代码。
我尝试过全局变量和小函数,但这总是伴随着性能下降。只需将数字插入代码总是更快。
lisp - ECL 如何在可执行文件中包含 ASDF 依赖项?
我有这个 ecl-make.lisp:
(stumpwm-system::*components*
是我对 的补充stumpwm.asd
,用于在该文件中生成 ASDF 组件以及上面正确排序的文件列表。)
它只是失败了:
我已经到了只解决以前尝试引入的错误的地步。如果您使用 ECL 构建了一个包含依赖项的程序,请告诉我您是如何做到的。我看到了如何在启动时stumpwm
启动和加载依赖项(即使没有加载 my ~/.eclrc
,它会告诉 ASDF 在哪里找到这些依赖项)。但这应该是可能的。
debugging - 如何使用 gcl 在 Common Lisp 中进行跟踪?
有没有办法打印出你的函数的所有调用来调试递归程序?
lisp - 将 Common Lisp 代码移植到 Clojure
将 Common Lisp 应用程序移植到 Clojure 有多实用?更具体地说,Common Lisp 中存在哪些 Clojure 中不存在且必须重写的功能?
common-lisp - 如何在 Common Lisp 中将字节数组转换为字符串?
我正在调用一个返回字节数组的有趣 API,但我想要一个文本流。有没有一种简单的方法可以从字节数组中获取文本流?现在我只是拼凑起来:
然后将结果包装在 with-input-from-string 中,但这不是最好的方法。(另外,它的效率非常低。)
在这种情况下,我知道它始终是 ASCII,因此将其解释为 ASCII 或 UTF-8 都可以。我正在使用支持 Unicode 的 SBCL,但我更喜欢便携式(甚至仅 ASCII)解决方案,而不是 SBCL-Unicode 特定的解决方案。
algorithm - Common Lisp 中的线性递归列表差分函数
我正在阅读本教程以获得乐趣,但被他说的最后一句话卡住了,“练习:给出联合和差异的线性递归实现。” (用于列表)
联盟,没有汗水。
差异,汗水。
尝试看起来像这样。. .
现在,它返回 L1 中所有不在 L2 中的元素,但它只返回所有 L2(显然)。同样,如果我将第 3 行中的 L2 更改为“nil”,那么它只会返回不在 L2 中的所有 L1,但不返回 L2。
我对变通方法的尝试看起来并不递归,当它们出现时,我最终会遇到堆栈溢出(就像我尝试在某处调用 (list-diff L2 L1) 一样)。
他的任何其他练习,例如列表交集,只需要遍历 L1 的元素。在这里,我想从 L2 中删除关键元素,或者运行 (list-diff L2 L1) 然后合并两者的结果,但这不再是真正的线性递归了。
想法?
(不是家庭作业,真的。我只是想尝试看看一些 LISP 以获得乐趣。)
编辑:根据响应正确执行此操作的功能是:
lisp - 解决斐波那契的 lisp 方法
我想尝试学习 Lisp,但很快就放弃了。我想我会再试一次。我正在研究欧拉计划中的问题 2——找出所有低于 400 万的偶数斐波那契数的总和。
我编写了以下代码,它可以工作,但很丑陋。其中最主要的是它非常慢 - 因为它一直在进行天真的递归。
当我用 Python 编写这个程序时,我在计算并且从不重新计算数字时建立了一个列表。我知道我可以在这里(以某种方式)做到这一点,但这似乎不符合 lisp 和函数式编程的精神。我在 #3 之后放弃了,当我达到递归深度限制并且不得不重写我的代码以使用循环而不是递归时。
所以我想我的问题是:
- 解决这个问题的“正确、笨拙的方式”是什么?
- 你如何协调递归和“计算一切”的概念与计算一切的实际限制?
- 除了 The Little Schemer 和 Project Euler 之外,还有什么学习 lisp 的建议吗?
这是我的代码:
oop - CLOS 中的插槽
任何 CL'er 可以解释一下 CLOS 中的“插槽”吗?我发现很难理解插槽名称后面的部分。那是在:
(defclass foo () (data1 :initarg foo))
“initarg”和其他类似的东西是什么意思?我正在重新阅读手册。所以,如果你们中的任何人能向像我这样的外行解释一下,我将不胜感激。
谢谢!
parameters - Common Lisp:使用 &rest 参数
谁能告诉我如何使用存储在 &rest 指定的值中的参数。
我已经阅读了很多,似乎作者只知道如何列出所有参数。
这很高兴看到,但并不是那么有用。
到目前为止,我发现的最好的方法是使用 first、second 等来获取您正在寻找的参数。
我注意到这个方法在第十个参数处停止工作,但规范(根据我读过的内容)支持至少 50 个。即使我使用 50 个参数的可能性很小,我想知道如何访问它们。
谢谢