问题标签 [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.
common-lisp - 在 Scheme 或 STk 中,函数将显示为过程或闭包,但为什么 LISP 会出错?
在 Ubuntu 上,如果我运行 MIT-Scheme,它将显示一个函数作为过程:
伯克利的 STk 将显示sq
为闭包:
为什么在 Lisp(Common Lisp clisp)中,当我做同样的事情时,它会给我一个错误,我怎样才能将一个函数显示为一个值(第一类值/对象)?
common-lisp - 为什么我必须调用从另一个函数返回的函数?
为什么这不起作用?
我遇到了这样的情况,后来发现它funcall
修复了它,即
我很困惑,因为它似乎第一个应该工作,因为我实际上有一个我正在调用的函数,而不仅仅是一个可能属于任一名称空间(即(type-of ((lambda () #'1+))) ; => FUNCTION
)的符号。我认为这有点像你不需要lambda,funcall
例如((lambda (x) x) :HI) ; => :HI
. 我错过了什么?
lisp - Common Lisp,“已定义但从未使用”
此函数编译时出现警告,第一行中定义了fn并且从未使用过,第二行中fn是未定义的函数:
为什么?一般解释或链接会很棒。
PD:完整日志:
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
lisp - 为什么在 Common Lisp 中 set 不能与 lambda 一起工作?
我正在编写一个 lisp 解释器(用 C 语言),并且正在实现 lambda 函数和set
语言特性。在我的解释器中,以下工作:
输出(b c)
。但是,Input a value to be used instead of (FDEFINITION 'F)
当我在clisp
. 我的问题如下:
- 为什么在 Common Lisp 中不允许这样做?
- 如何在 Common Lisp 中实现相同的目标?
- 我的口译员应该改变什么,以防止这种事情发生?
为了帮助您回答最后一个问题——目前set
原语基本上只是将原子与环境中的值相关联。上面的代码在我的解释器中工作,因为要评估(f '(a b c))
它f
在环境中查找,发现它是一个 lambda 函数,然后将该 lambda 函数应用于参数'(a b c)
。
谢谢您的帮助。
编辑:这不是“Lisp-1 和 Lisp-2 之间有什么区别?”的副本。尽管 Lisp-1 和 Lisp-2 之间的差异可能是为什么这不起作用的原因clisp
,但我的问题实际上集中在set
原语的机制及其底层实现上。
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)
lisp - 为什么 lisp 中的 mapcar 使用名称而不是函数?
我正在阅读一本 lisp 书,我正在看mapcar
,我的问题是为什么这是有效的:
但这不是:
换句话说,是否有理由在 lisp 中决定第一个参数mapcar
不能是函数本身,而必须是它的名称?这有什么用?