问题标签 [lisp-2]

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 投票
2 回答
159 浏览

common-lisp - 在 Scheme 或 STk 中,函数将显示为过程或闭包,但为什么 LISP 会出错?

在 Ubuntu 上,如果我运行 MIT-Scheme,它将显示一个函数作为过程:

伯克利的 STk 将显示sq为闭包:

为什么在 Lisp(Common Lisp clisp)中,当我做同样的事情时,它会给我一个错误,我怎样才能将一个函数显示为一个值(第一类值/对象)?

0 投票
4 回答
1130 浏览

common-lisp - 为什么我必须调用从另一个函数返回的函数?

为什么这不起作用?

我遇到了这样的情况,后来发现它funcall修复了它,即

我很困惑,因为它似乎第一个应该工作,因为我实际上有一个我正在调用的函数,而不仅仅是一个可能属于任一名称空间(即(type-of ((lambda () #'1+))) ; => FUNCTION)的符号。我认为这有点像你不需要lambdafuncall例如((lambda (x) x) :HI) ; => :HI. 我错过了什么?

0 投票
2 回答
647 浏览

lisp - Common Lisp,“已定义但从未使用”

此函数编译时出现警告,第一行中定义了fn并且从未使用过,第二行中fn是未定义的函数:

为什么?一般解释或链接会很棒。

PD:完整日志:

0 投票
2 回答
306 浏览

common-lisp - 让 alexandria:curry 不一定要使用 funcall 是不是很傻?

curry目前,必须使用 Alexandria 的 curried 函数调用funcall. 但是,可以设置新函数symbol-function,这样我们就可以不用它并将其视为真正的函数。在https://lispcookbook.github.io/cl-cookbook/functions.html#with-the-alexandria-library上说明:

有充分的理由不允许这两种风格吗?在这种柯里化的背景下,这对我来说看起来很有趣。

ps:大约 3 周前,我确实在 Alexandria 的问题跟踪器上询问过

pps:https ://gitlab.common-lisp.net/alexandria/alexandria/blob/master/functions.lisp#L116

0 投票
0 回答
67 浏览

lisp - 为什么在 Common Lisp 中 set 不能与 lambda 一起工作?

我正在编写一个 lisp 解释器(用 C 语言),并且正在实现 lambda 函数和set语言特性。在我的解释器中,以下工作:

输出(b c)。但是,Input a value to be used instead of (FDEFINITION 'F)当我在clisp. 我的问题如下:

  1. 为什么在 Common Lisp 中不允许这样做?
  2. 如何在 Common Lisp 中实现相同的目标?
  3. 我的口译员应该改变什么,以防止这种事情发生?

为了帮助您回答最后一个问题——目前set原语基本上只是将原子与环境中的值相关联。上面的代码在我的解释器中工作,因为要评估(f '(a b c))f在环境中查找,发现它是一个 lambda 函数,然后将该 lambda 函数应用于参数'(a b c)

谢谢您的帮助。

编辑:这不是“Lisp-1 和 Lisp-2 之间有什么区别?”的副本。尽管 Lisp-1 和 Lisp-2 之间的差异可能是为什么这不起作用的原因clisp,但我的问题实际上集中在set原语的机制及其底层实现上。

0 投票
3 回答
1172 浏览

function - Emacs Lisp 可以将 lambda 形式分配给像 Scheme 这样的变量吗?

在研究 Emacs Lisp 的符号单元时,我发现对于一个示例函数,例如

我可以调用(symbol-function 'a),它返回(lambda (&rest x) x)。如果我愿意,我可以使用它

它与上面的原始功能具有相同的功能。现在,这让我想起了 Scheme,其中 lambda 表达式是函数的主体,并被分配给具有 Scheme 的 all-purpose 的变量名define。例如

只需将 lambda 表达式分配给atom?-- 现在atom?是一个函数。那么elisp可以做到这一点,即,将一个lambda表达式分配给一个符号,然后将它用作一个函数吗?我试过了

(void-function new-a)如果我尝试将它用作函数,它会给出。有没有办法在这个问题上模仿 Scheme 世界?看来一定有办法。如果我们不能把这个 lambda 表达式变成一个函数,为什么函数 cell 还要a包含呢?(lambda (&rest x) x)

0 投票
2 回答
90 浏览

lisp - 为什么 lisp 中的 mapcar 使用名称而不是函数?

我正在阅读一本 lisp 书,我正在看mapcar,我的问题是为什么这是有效的:

但这不是:

换句话说,是否有理由在 lisp 中决定第一个参数mapcar不能是函数本身,而必须是它的名称?这有什么用?