JavaScript提供了函数式编程方面的哪些子集和类似lisp的特性?



切中要害,在https://stackoverflow.com/questions/4696618/is-haskell-a-lisp?answertab=votes#tab-top,有Kevin Cantu的评论说:

是的,除了语法,JavaScript可能更多的是比Haskell更Lisp。(最初设想为一个方案实现…)

同样,在Lambda the Ultimate: A Lisp to JavaScript编译器中的100行中,他们说:

很明显JS和Lisp有很强的联系语义级别[…]

我熟悉Lisp和函数式编程,但不熟悉JavaScript。这些命题让人怀疑JavaScript到底有多强大。到目前为止,我读到的是它提供了lambda表达式和闭包。它还提供了哪些函数式编程概念和类似lisp的特性?例如,它是否提供尾调用递归、宏或将代码作为数据操作的能力(如Lisp)?

JavaScript提供的一些东西可以被认为是"Lisp-like":

  • 第一类函数(包括lambdas和闭包)
  • 动态分型
  • 与CLOS有相似之处的动态对象模型
  • 与源代码格式(JSON)匹配的可读数据格式
  • 使用eval函数(可在交互式REPL中使用)进行运行时评估

一些Javascript没有的东西,而这些东西在其他lisp中很常见或很重要:

  • 代码和数据的同义表示(s表达式)
  • 链表/序列的内置文字
  • 一般支持不可变数据结构(特别是对于Clojure,其中每个数据结构都是持久和不可变的)
  • 一个广泛的元编程宏系统
  • 用于性能优化的可选静态类型(例如Common Lisp或Clojure中的类型提示)
  • 并发支持
  • 尾呼优化

最新更新