问题标签 [special-form]
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.
function - 可以是一个适当的函数而不是一个特殊的形式
我终于开始学习函数式语言(emacs lisp),它明确区分了函数和特殊形式,例如流控制,例如 if。
特殊形式与功能不同是否有基本/理论原因?有任何语言提供功能if
吗?
谢谢
clojure - 有没有办法以编程方式获取 clojure 特殊形式的集合?
是否存在类似的东西?:
function - 方案/球拍:用布尔值折叠
返回10
这是我所期望的,但是
给我错误
foldr
接受一个函数(它接受两个参数,因为我有一个列表)、一个基本情况和一个列表。如果列表有多个布尔值并且它们都是真的,我希望我的第二行代码返回真,这就是我认为它会起作用的方式。但显然不是。
lisp - 允许将特殊形式视为正常值会产生什么后果?
我发现在 Clojure 中,特殊形式不能作为参数传递或保存在变量中:
在球拍/方案中:
这很酷,我很好,我知道我可以编写一个函数来包装一个特殊的表单,然后传递那个函数。
但我想知道为什么 Lisps 有这个限制,以及允许这样做会产生什么负面影响。他们是否有任何允许这样做的主要方言?
scheme - 方案评估程序和特殊表格
我对 Scheme 的评估有疑问,我只是想确保我对如何评估程序有正确的理解。
因此,当 Scheme 解释器开始评估一个列表时,第一个元素被评估,这必须评估为一个过程,否则它就是一个错误。如果此过程不是特殊形式,则对列表中的每个元素进行求值,然后将其作为参数传递给过程。如果该过程是一种特殊形式,则执行不同的评估过程,例如如果,则评估第一个参数,然后仅评估两个和三个参数中的一个。此外,原子对自身进行评估,或者对它们先前绑定的值进行评估。
基本上,是否需要特殊表格来阻止对所有内容进行评估?谢谢
scheme - 方案,原始程序和特殊形式
在 Scheme 中,原始过程是否被视为特殊形式?
另外,有点太笼统了,但定义与其他特殊形式有何不同?
谢谢
clojure - 'do' 特殊形式有什么作用?
文档说:
(do exprs*)
按顺序计算表达式并返回最后一个的值。如果没有提供表达式,则返回 nil。
但是,我只是这样做了:
结果是:
hownowbrownow2
那么为什么又需要这个东西呢?
clojure - Clojure 宏/特殊形式中的动态符号
我有一个关于如何定义函数/宏的问题,这些函数/宏调用其他宏或特殊形式,但传入的符号之一需要是动态的。
这个问题的最简单版本如下所述:
我们可以使用定义变量def
但是,如果我们希望x
以编程方式确定名称以便我们可以做类似的事情怎么办?
我们可以尝试定义一个函数
然而它并没有做我们想要的
起初它似乎是一个宏工作(即使它似乎是不必要的)
但这只是肤浅的,因为我们真的回到了我们从常规 def 开始的地方。
如果我使用eval
,我可以做到,但似乎没有eval
必要
如果有其他内置命令可以实现这个特定的示例,那么它们并不是我真正想要的,因为def
它只是为了展示一个特定的示例。有些宏比def
我可能想要调用的更复杂,而且不必担心它们是如何在内部实现的。
function - Clojure 星号特殊形式(fn*、let* 等...)
我发现许多“特殊形式”只是在后台使用星号版本的宏(fn*、let* 和所有其他形式)。
例如,在 fn 的情况下,它将解构能力添加到 fn* 单独不提供的组合中。我试图找到一些关于 fn* 自己可以做什么和不能做什么的详细文档,但我没有那么幸运。
它绝对支持:
&/总括指标
/li>奇怪的是arity的重载,如:
/li>
所以我的问题最后是,为什么不只定义:
这绝对是最小的并且可以通过宏提供所有的arity选择(检查参数列表的大小,if / case语句以直接代码路径,将前几个参数绑定到所需的符号等)。
这是出于性能原因吗?也许有人甚至可以方便地链接到星号特殊形式的实际标准定义。
function - 为什么是做一个特殊的表格?
在 Clojure 中,为什么是do
特殊的形式,而不是像这样实现的函数?