JavaScript提供了哪些功能编程方面和类似Lisp的功能?

时间:2011-11-20 03:39:07

标签: javascript functional-programming lisp

直截了当,在https://stackoverflow.com/questions/4696618/is-haskell-a-lisp?answertab=votes#tab-top中,Kevin Cantu发表评论说:

  

是的,仅仅超越语法,JavaScript可能更多   一个Lisp而不是Haskell。 (最初被认为是一个计划   实施...)

另外,在Lambda the Ultimate: A Lisp to JavaScript Compiler in 100 Lines中,他们说:

  

很明显,JS和Lisp在这方面有很强的联系   语义水平[...]

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

1 个答案:

答案 0 :(得分:10)

JavaScript提供的一些可以被视为“类似Lisp”的东西:

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

Javascript没有的一些东西很常见或者是其他Lisps的核心:

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