p*****2 发帖数: 21240 | 1 到了该澄清一下的时候了。
披着C 外衣,我信。但是为什么是Lisp呢? |
m*******l 发帖数: 12782 | 2 functional
【在 p*****2 的大作中提到】 : 到了该澄清一下的时候了。 : 披着C 外衣,我信。但是为什么是Lisp呢?
|
c******o 发帖数: 1277 | 3 dynamic functional with a little oo |
p*****2 发帖数: 21240 | 4
functional就是lisp吗?
【在 m*******l 的大作中提到】 : functional
|
p*****2 发帖数: 21240 | 5
什么叫dynamic functional? 就是dynamic + functional吗?Ruby算吗?
LISP的a little OO是怎么体现的呀?
我觉得LISP最有特点的是code is data,这个我在JS上没看到呀。今天想了半天也没明
白这两个语言怎么像。要说functional的语言可多了。
【在 c******o 的大作中提到】 : dynamic functional with a little oo
|
f**********3 发帖数: 295 | 6 如果非要说这个的话,js有eval
【在 p*****2 的大作中提到】 : : 什么叫dynamic functional? 就是dynamic + functional吗?Ruby算吗? : LISP的a little OO是怎么体现的呀? : 我觉得LISP最有特点的是code is data,这个我在JS上没看到呀。今天想了半天也没明 : 白这两个语言怎么像。要说functional的语言可多了。
|
p*****2 发帖数: 21240 | 7
eval只能处理string吧?
【在 f**********3 的大作中提到】 : 如果非要说这个的话,js有eval
|
f**********3 发帖数: 295 | 8 code = string = data...
【在 p*****2 的大作中提到】 : : eval只能处理string吧?
|
p*****2 发帖数: 21240 | 9
lisp的data是list吧?
【在 f**********3 的大作中提到】 : code = string = data...
|
f**********3 发帖数: 295 | 10 是的,我只是说js里也可以data=code而已... 如果硬要说js和lisp像的话
【在 p*****2 的大作中提到】 : : lisp的data是list吧?
|
|
|
n*w 发帖数: 3393 | 11 是有人说javascript/ECMAScript是lisp的一个方言。我个人意见倒不认同。
看这个页面 http://www.european-lisp-symposium.org/ |
p*****2 发帖数: 21240 | 12
我觉得不是一回事。JS里至少data应该是JSON。你能把函数和JSON互相转换吗?
【在 f**********3 的大作中提到】 : 是的,我只是说js里也可以data=code而已... 如果硬要说js和lisp像的话
|
c*******9 发帖数: 9032 | 13 Lisp也可以处理JSON吧。JS data不一定是JSON吧。
觉得Lisp比Javascript更容易一层层composition。
【在 p*****2 的大作中提到】 : : 我觉得不是一回事。JS里至少data应该是JSON。你能把函数和JSON互相转换吗?
|
n*w 发帖数: 3393 | 14 lisp数据代码用同一个notation。js不是。 |
p*****2 发帖数: 21240 | 15
那你觉得JS data是什么?就是String?
【在 c*******9 的大作中提到】 : Lisp也可以处理JSON吧。JS data不一定是JSON吧。 : 觉得Lisp比Javascript更容易一层层composition。
|
c*******9 发帖数: 9032 | 16 data可以多种什么数组之类,String也比较常用吧。
【在 p*****2 的大作中提到】 : : 那你觉得JS data是什么?就是String?
|
c*******9 发帖数: 9032 | 17 嗯。这个notation是容易相互嵌套组合的关键。
【在 n*w 的大作中提到】 : lisp数据代码用同一个notation。js不是。
|
p*****2 发帖数: 21240 | 18
LISP也有string呀。
【在 c*******9 的大作中提到】 : data可以多种什么数组之类,String也比较常用吧。
|
f**********3 发帖数: 295 | 19 lisp的reference是有结构的,js的string是没结构的,当然也可以parse。lisp和js当
然是不同的。只不过js有code=data这种“feature”而已。data的形式当然不一样。而
且js和lisp的差别有何至于此。至于说"js是披着c外衣的lisp”这句话,我并不认同。
还是应该看看提出这个观点的人怎么说。理论上说,所有图灵完备的语言都是等价的,
还是应该看看作者提出这个观点的context是什么才有意义。
至于说json和函数转换,json就是string,
json {"code": "1+3"} lisp '(+ 1 3)
json {"int": "1"} lisp '1
parse一下,把string eval了
lisp对reference也是parse string,只不过build in了而已。reference无非就是也是
一个string,不过同时有信息说我的内容(type)是“代码”。而且前缀表达式使得很
多形式都统一了,比较方便而已。
【 在 peking2 (clojure) 的大作中提到: 】 |
p*****2 发帖数: 21240 | 20
有eval的语言太多了吧?为什么只有JS说自己是LISP?
另外LISP里的list是functional language最基本的数据结构,这个JS里根本就没有。
你说的String真的不算什么数据结构,算是数据类型吧。如果有个eval就可以说自己
code=data的话,那可是太多语言有这个特点了。
【在 f**********3 的大作中提到】 : lisp的reference是有结构的,js的string是没结构的,当然也可以parse。lisp和js当 : 然是不同的。只不过js有code=data这种“feature”而已。data的形式当然不一样。而 : 且js和lisp的差别有何至于此。至于说"js是披着c外衣的lisp”这句话,我并不认同。 : 还是应该看看提出这个观点的人怎么说。理论上说,所有图灵完备的语言都是等价的, : 还是应该看看作者提出这个观点的context是什么才有意义。 : 至于说json和函数转换,json就是string, : json {"code": "1+3"} lisp '(+ 1 3) : json {"int": "1"} lisp '1 : parse一下,把string eval了 : lisp对reference也是parse string,只不过build in了而已。reference无非就是也是
|
|
|
p*****2 发帖数: 21240 | 21 Google了一下,就看到下边这段模棱两可的context。
Lisp in C's Clothing
JavaScript's C-like syntax, including curly braces and the clunky for
statement, makes it appear to be an ordinary procedural language. This is
misleading because JavaScript has more in common with functional languages
like Lisp or Scheme than with C or Java. It has arrays instead of lists and
objects instead of property lists. Functions are first class. It has
closures. You get lambdas without having to balance all those parens. |
p*****2 发帖数: 21240 | 22 按照王垠的说法,貌似也就是lambda, JS跟Lisp搭边吧?可是支持lambda的语言也很
多呀。难道JS是第二个支持lambda的语言吗?
Lisp 的语法是世界上最精炼,最美观,也是语法分析起来最高效的语法。这是 Lisp
独一无二的,其他语言都没有的优点。有些人喜欢设计看起来很炫的语法,其实都是自
找麻烦。为什么这么说呢,请参考这篇《谈语法》。
Lisp 是第一个可以在程序的任何位置定义函数,并且可以把函数作为值传递的语言。
这样的设计使得它的表达能力非常强大。这种理念被 Python,JavaScript,Ruby 等语
言所借鉴。
Lisp 有世界上最强大的宏系统(macro system)。这种宏系统的表达力几乎达到了理
论所允许的极限。如果你只见过 C 语言的“宏”,那我可以告诉你它是完全没法跟
Lisp 的宏系统相提并论的。
Lisp 是世界上第一个使用垃圾回收(garbage collection)的语言。这种超前的理念
,后来被 Java,C# 等语言借鉴。 |
e*******o 发帖数: 4654 | 23 https://gist.github.com/ayosec/3121940
【在 p*****2 的大作中提到】 : 按照王垠的说法,貌似也就是lambda, JS跟Lisp搭边吧?可是支持lambda的语言也很 : 多呀。难道JS是第二个支持lambda的语言吗? : Lisp 的语法是世界上最精炼,最美观,也是语法分析起来最高效的语法。这是 Lisp : 独一无二的,其他语言都没有的优点。有些人喜欢设计看起来很炫的语法,其实都是自 : 找麻烦。为什么这么说呢,请参考这篇《谈语法》。 : Lisp 是第一个可以在程序的任何位置定义函数,并且可以把函数作为值传递的语言。 : 这样的设计使得它的表达能力非常强大。这种理念被 Python,JavaScript,Ruby 等语 : 言所借鉴。 : Lisp 有世界上最强大的宏系统(macro system)。这种宏系统的表达力几乎达到了理 : 论所允许的极限。如果你只见过 C 语言的“宏”,那我可以告诉你它是完全没法跟
|
p*****2 发帖数: 21240 | 24
没看到有提javascript
【在 e*******o 的大作中提到】 : https://gist.github.com/ayosec/3121940
|
e*******o 发帖数: 4654 | 25 讲的是 macro 的牛逼之处。
javascript,perl 与lisp的距离是一样的啊。
【在 p*****2 的大作中提到】 : : 没看到有提javascript
|
p*****2 发帖数: 21240 | 26
是。回头好好研究一下。macro确实还没好好领悟呢。
【在 e*******o 的大作中提到】 : 讲的是 macro 的牛逼之处。 : javascript,perl 与lisp的距离是一样的啊。
|
e*******o 发帖数: 4654 | 27 我觉得macro 这个东西是过度抽象,牛逼的程序员可以自己玩。大家一起玩,还是java
好。哈哈。
【在 p*****2 的大作中提到】 : : 是。回头好好研究一下。macro确实还没好好领悟呢。
|
p*****2 发帖数: 21240 | 28
java
macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起
来不如python, ruby什么的有意思。
【在 e*******o 的大作中提到】 : 我觉得macro 这个东西是过度抽象,牛逼的程序员可以自己玩。大家一起玩,还是java : 好。哈哈。
|
c*******9 发帖数: 9032 | 29 LISP方便把代码quote 成string,处理后在反向quote成代码。js怎么做到这点?
【在 p*****2 的大作中提到】 : : java : macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起 : 来不如python, ruby什么的有意思。
|
c*******9 发帖数: 9032 | 30 对没有相关数学基础的人来说monad确实抽象了些。不过不认同王垠对monad的批判,照
他的说法,什么语音都不用封装,直接全局变量岂不是更方便。
【在 p*****2 的大作中提到】 : : java : macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起 : 来不如python, ruby什么的有意思。
|
|
|
m******t 发帖数: 635 | 31 Javascript只是被承认是FP,重来没有被承认是Lisp或者scheme,在wikipedia上JS和
Ruby, Python等一票属于被Lisp影响的语言。
http://en.wikipedia.org/wiki/Lisp_%28programming_language%29
我个人认为能否被认为是否Lisp的关键是下面这句:
The interchangeability of code and data also gives Lisp its instantly
recognizable syntax. All program code is written as s-expressions, or
parenthesized lists.
这条在Javascript是不成立的,JS的改版CoffeeScript也不是。但是ClojureScript是
可以的。
and
【在 p*****2 的大作中提到】 : Google了一下,就看到下边这段模棱两可的context。 : Lisp in C's Clothing : JavaScript's C-like syntax, including curly braces and the clunky for : statement, makes it appear to be an ordinary procedural language. This is : misleading because JavaScript has more in common with functional languages : like Lisp or Scheme than with C or Java. It has arrays instead of lists and : objects instead of property lists. Functions are first class. It has : closures. You get lambdas without having to balance all those parens.
|
e*******o 发帖数: 4654 | 32 monad 抽象。
macro 理念好理解,但是写起来,和看别人写的,比较蛋疼。
【在 p*****2 的大作中提到】 : : java : macro和monad比哪个更抽象呀?还是差不多?java确实是大众语言,就是罗嗦了,写起 : 来不如python, ruby什么的有意思。
|
b***e 发帖数: 1419 | 33 Lisp's expressiveness power is the strongest among the programming languages
. It is so close to lambda calculus such that everything and anything can
be encoded. JS is almost like that, where the only counter part that is not
found is the powerful macro system. "eval" is in fact very weak as
compared to macros. Not everything can be serialized and put in a string
that fits eval. If you turn to the help of variables in eval, then you lose
static binding. Not even mentioning the possibility of nested macros, e.g.
code generation in code generation, in Lisp.
and
【在 p*****2 的大作中提到】 : Google了一下,就看到下边这段模棱两可的context。 : Lisp in C's Clothing : JavaScript's C-like syntax, including curly braces and the clunky for : statement, makes it appear to be an ordinary procedural language. This is : misleading because JavaScript has more in common with functional languages : like Lisp or Scheme than with C or Java. It has arrays instead of lists and : objects instead of property lists. Functions are first class. It has : closures. You get lambdas without having to balance all those parens.
|
p*****2 发帖数: 21240 | 34
这个是我觉得最靠谱的。跟我理解类似 。
【在 m******t 的大作中提到】 : Javascript只是被承认是FP,重来没有被承认是Lisp或者scheme,在wikipedia上JS和 : Ruby, Python等一票属于被Lisp影响的语言。 : http://en.wikipedia.org/wiki/Lisp_%28programming_language%29 : 我个人认为能否被认为是否Lisp的关键是下面这句: : The interchangeability of code and data also gives Lisp its instantly : recognizable syntax. All program code is written as s-expressions, or : parenthesized lists. : 这条在Javascript是不成立的,JS的改版CoffeeScript也不是。但是ClojureScript是 : 可以的。 :
|
c*******9 发帖数: 9032 | 35 Macro虽强,但不是Lisp的最突出特征,很多语言都有很强的macro系统。lisp还是强在
s表达式的扩展性,也让eval在lisp中更有用。和macro比哪个更有用不好说,但楖念上
lisp的eval更完美。code生成code生成code用eval也能做到吧。
languages
not
lose
g.
【在 b***e 的大作中提到】 : Lisp's expressiveness power is the strongest among the programming languages : . It is so close to lambda calculus such that everything and anything can : be encoded. JS is almost like that, where the only counter part that is not : found is the powerful macro system. "eval" is in fact very weak as : compared to macros. Not everything can be serialized and put in a string : that fits eval. If you turn to the help of variables in eval, then you lose : static binding. Not even mentioning the possibility of nested macros, e.g. : code generation in code generation, in Lisp. : : and
|
c*******9 发帖数: 9032 | 36 更外你说说什么可执行语句不能引用为string。
languages
not
lose
g.
【在 b***e 的大作中提到】 : Lisp's expressiveness power is the strongest among the programming languages : . It is so close to lambda calculus such that everything and anything can : be encoded. JS is almost like that, where the only counter part that is not : found is the powerful macro system. "eval" is in fact very weak as : compared to macros. Not everything can be serialized and put in a string : that fits eval. If you turn to the help of variables in eval, then you lose : static binding. Not even mentioning the possibility of nested macros, e.g. : code generation in code generation, in Lisp. : : and
|
c*******9 发帖数: 9032 | 37 更外你说说什么可执行语句不能引用为string。
languages
not
lose
g.
【在 b***e 的大作中提到】 : Lisp's expressiveness power is the strongest among the programming languages : . It is so close to lambda calculus such that everything and anything can : be encoded. JS is almost like that, where the only counter part that is not : found is the powerful macro system. "eval" is in fact very weak as : compared to macros. Not everything can be serialized and put in a string : that fits eval. If you turn to the help of variables in eval, then you lose : static binding. Not even mentioning the possibility of nested macros, e.g. : code generation in code generation, in Lisp. : : and
|
b***e 发帖数: 1419 | 38 For instance, you want to generate code:
var f = ...;
var code = "f (1)";
Then at some other point you want to call:
eval(code);
You lose the static binding of f at the call point. Variable f will be
evaluated in the dynamic context at call point.
In general, it is difficult to inline a non serializable value, such as a
function closure in to "code", which is just string in JS.
【在 c*******9 的大作中提到】 : 更外你说说什么可执行语句不能引用为string。 : : languages : not : lose : g.
|