Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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/1/ssh/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 ECMAScript真的是Lisp的方言吗?_Javascript_Lisp_Ecma262 - Fatal编程技术网

Javascript ECMAScript真的是Lisp的方言吗?

Javascript ECMAScript真的是Lisp的方言吗?,javascript,lisp,ecma262,Javascript,Lisp,Ecma262,我的一位朋友提请我注意以下欢迎信息: 。。。实施和应用 任何一种口齿不清的方言,包括 通用Lisp、Scheme、Emacs Lisp、, AutoLisp、ISLISP、Dylan、Clojure、, ACL2,ECMAScript 然后问ECMAScript是否真的是Lisp的方言。真的可以这样认为吗?为什么? 是否有一套定义明确的标准来帮助我们判断一种语言是否是Lisp方言?或者说是一种非常松散的方言(在这种情况下,我们可以将Python、Perl、Haskell等添加到Lisp方言列表中

我的一位朋友提请我注意以下欢迎信息:

。。。实施和应用 任何一种口齿不清的方言,包括 通用Lisp、Scheme、Emacs Lisp、, AutoLisp、ISLISP、Dylan、Clojure、, ACL2,ECMAScript

然后问ECMAScript是否真的是Lisp的方言。真的可以这样认为吗?为什么?


是否有一套定义明确的标准来帮助我们判断一种语言是否是Lisp方言?或者说是一种非常松散的方言(在这种情况下,我们可以将Python、Perl、Haskell等添加到Lisp方言列表中吗?

Brendan Eich想为Netscape开发一种类似Scheme的语言,但现实介入了,他最终不得不将就一些对“普通”人来说似乎很像C和Java的东西,但它就像一种函数式语言

就我个人而言,我认为将ECMAScript称为“Lisp”是不必要的,但对每个人来说都是自己的。真正的Lisp的关键在于数据结构表示法和代码表示法是相同的,而ECMAScript(或Ruby、Python或任何其他非Lisp的动态函数式语言)则并非如此


警告:我没有Lisp凭据:-)

不是。正如您所指出的,它有很多函数根,但现在很多其他非lisp语言也是如此

lisp还有一个使它们成为lisp的特征,那就是lisp代码是按照lisp数据结构(同源性)编写的。这就是lisps强大的宏系统的功能所在,也是为什么它在非lisps人看来如此怪异的原因。函数调用只是一个列表,其中列表中的第一个元素是函数的名称

因为lisp代码只是lisp数据,所以可以使用元编程来完成一些非常强大的功能,这是其他语言无法完成的。许多Lisp,甚至像clojure这样的现代Lisp,基本上都是作为一组宏来实现的。

不,不是


要被认为是Lisp,就必须是同音异义词,而ECMAscript不是。

我认为ECMAscript是Lisp的方言,就像英语是法语的方言一样。有共同点,但只有了解另一个武装的情况下,一个武装的任务才有困难:)


我发现有趣的是,在第四届欧洲Lisp研讨会上突出强调的三个主题演讲中,只有一个直接涉及到Lisp(另外两个是关于x86/JVM/Python和Scala的)。

尽管我不会将JavaScript称为Lisp,但我个人认为,与大多数主流语言(甚至是函数式语言)相比,它更类似于Lisp语言

首先,就像Lisp一样,它本质上是一种基于非类型lambda演算的简单命令式语言,适合由REPL驱动

其次,在JavaScript中嵌入文字数据(包括lambda表达式形式的代码)很容易,因为其中的一个子集相当于JSON。这是一种常见的Lisp模式

第三,它的价值和类型模型非常简单。广义上讲,它是面向对象的,因为所有的价值观都有一个同一性的概念,但在最狭义的意义上,它不是特别面向对象的。就像在Lisp中一样,对象是类型化的并且非常动态。代码通常分为函数单元,而不是类

事实上,JavaScript世界最近有几项(或多或少)的发展,使语言有时感觉非常不清晰。以jQuery为例。在我看来,将CSS选择器作为子语言嵌入是一种类似Lisp的方法。或者考虑ECMAScript和谐的元对象协议:它看起来像是普通Lisp的直接端口(比Python或露比的Meta对象系统要多得多)。这个名单还有很多

JavaScript确实缺少宏和REPL与编辑器集成的合理实现,这是不幸的。当然,来自其他语言的影响也非常明显(不一定是坏的)。尽管如此,Lisp和JavaScript阵营之间仍然存在大量的文化兼容性。其中有些可能是巧合(比如最近JavaScript JIT编译的兴起),有些是系统性的,但肯定是存在的。

“方言”肯定把它拉得太远了。尽管如此,作为一个学习和使用过Python、Javascript和Scheme的人,Javascript显然比Python有一种更为Lisp的感觉(Coffeescript可能更为如此)


至于为什么欧洲Lisp研讨会想要将Javascript描述为Lisp,显然他们想要借助Javascript的流行,因为Javascript的程序员数量是列表中所有其他Lisp方言总和的很多倍。

不是一种“方言”。我在70年代学习了LISP,从那以后就没有使用过它,但当我最近学习JavaScript时,我发现自己觉得它就像LISP一样。我认为这是由两个因素造成的:(1)JSON是一个类似列表的关联结构,(2)JS的“对象”似乎本质上就是JSON。因此,即使您不像在列表中编写LISP那样用JSON编写JS程序,您也几乎可以这样做


所以我的答案是,有足够的相似性,熟悉LISP的程序员在使用JavaScript时会想起它。像Java套装中的JS=LISP这样的语句只表达了这种感觉。我相信这就是它的全部。

如果你调用ECMAScript Lisp,你基本上是在断言任何动态语言都是Lisp。因为我们已经有了“动态语言”,所以您将“Lisp”简化为一个无用的同义词,而不是让它有更具体的含义

Lisp应该正确地引用具有特定属性的语言

如果出现以下情况,则语言为Lisp:

  • 它的源代码是树结构的数据,它有一个简单的打印符号作为nes