Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript提供了哪些函数式编程方面的子集和类似Lisp的特性?_Javascript_Functional Programming_Lisp - Fatal编程技术网

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

JavaScript提供了哪些函数式编程方面的子集和类似Lisp的特性?,javascript,functional-programming,lisp,Javascript,Functional Programming,Lisp,切中要害的是,凯文·坎图(Kevin Cantu)在一篇评论中说: 是的,不仅仅是语法,JavaScript可能更重要 比哈斯克尔更口齿不清。(最初设想为一项计划 实施…) 此外,他们还说: 很明显,JS和Lisp在同一阶段有着紧密的联系 语义级别[…] 我熟悉Lisp和函数式编程,但不熟悉JavaScript。因此,这些命题让人怀疑JavaScript有多强大。到目前为止,我读到的是它提供了lambda表达式和闭包。它还提供了哪些函数式编程概念和类似Lisp的功能?例如,它是否提供尾部调用递归

切中要害的是,凯文·坎图(Kevin Cantu)在一篇评论中说:

是的,不仅仅是语法,JavaScript可能更重要 比哈斯克尔更口齿不清。(最初设想为一项计划 实施…)

此外,他们还说:

很明显,JS和Lisp在同一阶段有着紧密的联系 语义级别[…]


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

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

  • 第一类函数(包括lambdas和闭包)
  • 动态类型
  • 动态对象模型与
  • 与源代码格式(JSON)匹配的可读数据格式
  • 具有“eval”功能的运行时评估(可在交互式应用程序中使用)
Javascript所没有的一些东西对于其他Lisp非常常见或非常重要:

  • 代码和数据的同象性表示(S表达式)
  • 链接列表/序列的内置文字
  • 通常支持不可变的数据结构(尤其是Clojure,其中每个数据结构都是不可变的)
  • 元编程的扩展宏系统
  • 用于性能优化的可选静态类型(例如,在Common Lisp或Clojure中键入提示)
  • 并发支持
  • 尾部呼叫优化

JavaScript是一种功能齐全的OO语言,而不是专门的HTML助手。但这真的是讨论它的合适论坛吗?我的目的不是主观地讨论JavaScript是否是临时的。如果我给人留下这样的印象,我很抱歉。我的问题只是关于它有哪些功能特性。没有宏,没有尾部调用优化(目前)。另一个对于Lisp和函数式编程语言至关重要的特性是Javascript没有的,是链接列表的内置类型和文字语法。以及对不可变数据结构的良好支持。函数式编程语言(虽然不是通用的Lisp)中javascript缺少的另一个常见功能是尾部调用优化。通过eval,我们还可以构建一个类似Lisp的REPL,所有优秀的javascript调试器现在都拥有它。