我读到 javascript 部分基于Scheme(LISP 的一种方言)。当我读到这篇文章和 LISP 时,我突然意识到 javascript 函数表达式语法似乎是一种类似的结构。我对 s 表达式的理解是,所有语法要么被视为原子,要么被视为可以递归引用的 s 表达式,并最终被简化为原子。如果 javascript 函数将函数的创建和引用视为另一个变量(数组、字符串和数字也都可以分配给变量),这是否意味着 javascript 函数表达式本质上是 s 表达式思想的实现?
最佳答案
S-表达式(符号表达式的缩写)是一种数据格式(例如 XML、JSON 等)。 S 表达式是由列表、符号、数字、字符串和其他数据对象构建的。
Lisp 数据和代码通常以外部文本格式编写为 s 表达式或由函数创建。
创建嵌套列表:
CL-USER 1 > (list '* 10 (list '- 3 5))
(* 10 (- 3 5))
上面的结果实际上是一个符号和数字的嵌套列表,而不是一个字符串。
实际将此列表作为程序执行:
CL-USER 2 > (eval (list '* 10 (list '- 3 5)))
-20
JavaScript 没有直接等价的:
它不会在此类数据结构中编写代码。 JavaScript 程序是文本
JavaScript 可以通过其
eval
计算源代码,但源代码是一个字符串
JavaScript 函数对象是不相关的,因为它们本身不是源代码,没有文本格式等。使用它们进行参数和计算也使它们不是源代码,并且不会使它们处理 S- 的等价物表达式。 Lisp 中使用 S 表达式来表示源代码,就像其他数据一样。
关于javascript - javascript 函数表达式是否类似于或基于 s 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57081533/