javascript - javascript 函数表达式是否类似于或基于 s 表达式?

标签 javascript functional-programming scheme expression lisp

我读到 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/

相关文章:

Scala Cats效果-IO异步移位-如何工作?

prototype - Lisp 和 Scheme 存在哪些 POOP 框架

algorithm - 允许在一跳中完全绑定(bind)任何 6 元组模式的最小索引集是什么?

javascript - 如何从另一个项目引用javascript文件?

javascript - 带停止点的 slider

Javascript 正则表达式匹配最后一次出现的字符串后的所有内容

functional-programming - 在Scheme中,如何理解 "(define (f x . y) (cons x y))"

javascript - 使用 jQuery 获取文本

java - 如何映射 "Try with resources"异常类型?

java - 了解 Java 8/9 函数式编程(lambda 表达式)中的 Map 和 Reduce。 map() 和 reduce() 如何提高性能?