问题标签 [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 投票
2 回答
120 浏览

clojure - 重命名 Clojure 的特殊形式

重命名 Clojure 的特殊形式的最佳方法是什么?

例如,如果我更喜欢 defvar 而不是 def 或 defun 而不是 defn,那么最好的方法是什么?

0 投票
1 回答
157 浏览

macros - Elixir 宏,引用位串模式匹配类型

我正在做一个项目,我可能会在其中编写大量以下形式的代码:

(对于任意一组输入名称和类型,input作为一次生成一个字节的二进制流)

能够在宏中处理这一点将非常有用,这样我就可以简单地编写(例如)use Unpack quote([{name1, integer-8}, {name2, integer-little-32}, {name3, binary-10}])并自动生成必要的结构、typedef 和解包函数,用于固定大小的任意命名字段。甚至可以扩展它,在元组中添加第三个字段来传递一个函数来处理可变大小的类型。不幸的是,当我尝试做一个更简单的版本时(只取一个大小的字段,并且只匹配 1 ):

系统告诉我它有无效的参数quote/1。我认为这是因为位串模式匹配中使用的“类型”是一种特殊形式,一般而言,位串文字也是如此,并且这些特定项目不会在其他任何地方使用。

那么,我该如何解决呢?我有十几种打包结构要解包,每种都有五到二十个不同的字段。如果我不这样做,我可能会求助于 Vim 宏来至少节省我的双手……但这对于维护大量极其重复的代码并没有真正的帮助。

0 投票
5 回答
687 浏览

function - 如何在 Common Lisp 中使用特殊运算符/表单实现“+”

On Lisp(第 9 页)中,可以找到以下声明:

函数是 Lisp 程序的基石。它们也是 Lisp 的基石。在大多数语言中,+ 运算符与用户定义的函数完全不同。但是 Lisp 有一个单一的模型,函数应用程序,用来描述程序完成的所有计算。Lisp + 运算符是一个函数,就像您可以自己定义的那些一样。事实上,除了少数称为特殊形式的运算符外,Lisp 的核心是 Lisp 函数的集合。是什么阻止你添加到这个集合中?什么都没有:如果你想到了你希望 Lisp 能做的事情,你可以自己写,你的新函数将被视为内置函数。

我的问题是如何+使用以下特殊运算符来实现运算符之类的东西?还是实际上使用了更多运算符,而格雷厄姆只是不够精确和戏剧化?

有没有办法查看这些函数的源代码?

0 投票
3 回答
104 浏览

if-statement - 在 cond 表达式中用作最后一个 case 的“else”关键字是 Scheme 中的一种特殊形式吗?

Scheme 中的cond-expression 是一种特殊形式,但是else在-expression 中用作final case 的关键字是cond一种特殊形式吗?或者它只是一个保留关键字,基本上等同于真值 #t ?在后一种情况下,为什么我不能写类似的东西(?eq else #t)