问题标签 [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.

0 投票
7 回答
980 浏览

function - 可以是一个适当的函数而不是一个特殊的形式

我终于开始学习函数式语言(emacs lisp),它明确区分了函数和特殊形式,例如流控制,例如 if。

特殊形式与功能不同是否有基本/理论原因?有任何语言提供功能if吗?

谢谢

0 投票
1 回答
220 浏览

clojure - 有没有办法以编程方式获取 clojure 特殊形式的集合?

是否存在类似的东西?:

0 投票
2 回答
2053 浏览

function - 方案/球拍:用布尔值折叠

返回10这是我所期望的,但是

给我错误

foldr接受一个函数(它接受两个参数,因为我有一个列表)、一个基本情况和一个列表。如果列表有多个布尔值并且它们都是真的,我希望我的第二行代码返回真,这就是我认为它会起作用的方式。但显然不是。

0 投票
2 回答
113 浏览

lisp - 允许将特殊形式视为正常值会产生什么后果?

我发现在 Clojure 中,特殊形式不能作为参数传递或保存在变量中:

在球拍/方案中:

这很酷,我很好,我知道我可以编写一个函数来包装一个特殊的表单,然后传递那个函数。

但我想知道为什么 Lisps 有这个限制,以及允许这样做会产生什么负面影响。他们是否有任何允许这样做的主要方言?

0 投票
2 回答
143 浏览

scheme - 方案评估程序和特殊表格

我对 Scheme 的评估有疑问,我只是想确保我对如何评估程序有正确的理解。

因此,当 Scheme 解释器开始评估一个列表时,第一个元素被评估,这必须评估为一个过程,否则它就是一个错误。如果此过程不是特殊形式,则对列表中的每个元素进行求值,然后将其作为参数传递给过程。如果该过程是一种特殊形式,则执行不同的评估过程,例如如果,则评估第一个参数,然后仅评估两个和三个参数中的一个。此外,原子对自身进行评估,或者对它们先前绑定的值进行评估。

基本上,是否需要特殊表格来阻止对所有内容进行评估?谢谢

0 投票
2 回答
1986 浏览

scheme - 方案,原始程序和特殊形式

在 Scheme 中,原始过程是否被视为特殊形式?

另外,有点太笼统了,但定义与其他特殊形式有何不同?

谢谢

0 投票
2 回答
101 浏览

clojure - 'do' 特殊形式有什么作用?

文档说:

(do exprs*)
按顺序计算表达式并返回最后一个的值。如果没有提供表达式,则返回 nil。

但是,我只是这样做了:

结果是:

hownowbrownow2

那么为什么又需要这个东西呢?

0 投票
1 回答
333 浏览

clojure - Clojure 宏/特殊形式中的动态符号

我有一个关于如何定义函数/宏的问题,这些函数/宏调用其他宏或特殊形式,但传入的符号之一需要是动态的。

这个问题的最简单版本如下所述:

我们可以使用定义变量def

但是,如果我们希望x以编程方式确定名称以便我们可以做类似的事情怎么办?

我们可以尝试定义一个函数

然而它并没有做我们想要的

起初它似乎是一个宏工作(即使它似乎是不必要的)

但这只是肤浅的,因为我们真的回到了我们从常规 def 开始的地方。

如果我使用eval,我可以做到,但似乎没有eval必要

如果有其他内置命令可以实现这个特定的示例,那么它们并不是我真正想要的,因为def它只是为了展示一个特定的示例。有些宏比def我可能想要调用的更复杂,而且不必担心它们是如何在内部实现的。

0 投票
3 回答
386 浏览

function - Clojure 星号特殊形式(fn*、let* 等...)

我发现许多“特殊形式”只是在后台使用星号版本的宏(fn*、let* 和所有其他形式)。

例如,在 fn 的情况下,它将解构能力添加到 fn* 单独不提供的组合中。我试图找到一些关于 fn* 自己可以做什么和不能做什么的详细文档,但我没有那么幸运。

它绝对支持:

  • &/总括指标

    /li>
  • 奇怪的是arity的重载,如:

    /li>

所以我的问题最后是,为什么不只定义:

这绝对是最小的并且可以通过宏提供所有的arity选择(检查参数列表的大小,if / case语句以直接代码路径,将前几个参数绑定到所需的符号等)。

这是出于性能原因吗?也许有人甚至可以方便地链接到星号特殊形式的实际标准定义。

0 投票
1 回答
126 浏览

function - 为什么是做一个特殊的表格?

在 Clojure 中,为什么是do特殊的形式,而不是像这样实现的函数?