免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: starwing83
打印 上一主题 下一主题

[C] 站在月亮看地球——牛逼的新语言 MoonScript [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
71 [报告]
发表于 2011-08-17 14:06 |只看该作者
回复 66# OwnWaterloo


    还有,请注意,未求值之前的的结果可能是个表或者非表,不一定是symbol。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
72 [报告]
发表于 2011-08-17 14:10 |只看该作者
回复  OwnWaterloo
可行,不过,moonscript目前没有let,你可以这么写:
for i = 1, (-> 这里是其他操作)() do ... end
starwing83 发表于 2011-08-17 14:02


(-> ...)() 是不是类似 ((lambda nil))……

要使用局部变量就:

  1. ((lambda (a b) ...)
  2.           x y)
复制代码



好吧, 你淫了……
但这里其实重点不是 "是否能嵌入let" , 而是是否可以 "嵌入任意表达式"。
比如, scheme 即使不用 lambda 实现 let , 但依然是可以嵌入其他表达式的。form 的定义是递归的。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
73 [报告]
发表于 2011-08-17 14:12 |只看该作者
回复 72# OwnWaterloo


    的确可以嵌入任意表达式的,但是moonscript没有let表达式难道我给你变一个?

对了,其实在大多数的lisp实现里面,let都是宏,都是将其转换成了((lambda (a b c ...) ....) 'a 'b 'c ....)的形式的。这点你得明白。Lisp只有很少的一部分(car,cdr什么的)才是原生的,大部分的都是宏或者库函数。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
74 [报告]
发表于 2011-08-17 14:20 |只看该作者
回复  OwnWaterloo
还有,请注意,未求值之前的的结果可能是个表或者非表,不一定是symbol。
starwing83 发表于 2011-08-17 14:06


表在其他语言里很容易找到, 所以只提symbol。

回复  OwnWaterloo

大多数脚本语言都有symbol,而且很遗憾的说,连C++0x都有了……(只不过是字符串)。
顺带说一下,symbol作为原生支持也出现在Haskell、ErLang等一打函数式语言里面,Symbol是函数式的标配。
决定是否求值,perl做得到,你只需要在参数列表写上&,那么这一项就不会求值了。
所以,收回你可怜的虚荣心吧

starwing83 发表于 2011-08-17 14:04


1. 字符串什么的就别拿来丢人现眼了
symbol 求值与未求值是有区别的, 你敢让字符串求值后是其他东西吗?

2. haskell, erlang什么的更别来丢人了
见了lisp, 不喊爷爷也得喊爸爸。根本是不同年代的东西。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
75 [报告]
发表于 2011-08-17 14:26 |只看该作者
回复  OwnWaterloo
的确可以嵌入任意表达式的,但是moonscript没有let表达式难道我给你变一个?

对了,其实在大多数的lisp实现里面,let都是宏,都是将其转换成了((lambda (a b c ...) ....) 'a 'b 'c ....)的形式的。这点你得明白。Lisp只有很少的一部分(car,cdr什么的)才是原生的,大部分的都是宏或者库函数。
starwing83 发表于 2011-08-17 14:12


lisp里面要变很简单啊, 方法在你下面就说了。
你还是没明白, let 只是用来举例, 并不一定就是需要let。

关心的是是否会出现一些蛋疼的东西:
1. 比如C89里面的变量声明必须在block首。
2. C99, C++ for是一个作用域, 但 for (char* p, int c; ; ) 又是不行的。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
76 [报告]
发表于 2011-08-17 14:28 |只看该作者
回复 74# OwnWaterloo


    那lisp叫谁爸爸?symbol的概念是lisp提出的么?

symbol就是symbol,至于是否能被求值,求值以后是否返回其他值,那是其他的语言特性,玩捆绑销售也不是这么玩的。

symbol的意义在于,其是系统符号表中的项,其比较、查找是非常快捷的(可以达到整数比较查找的级别),因此非常适合用于做flags这种东西,说白了,symbol就是写起来自然一点的immutable string而已,而这种东西什么语言都有。

至于你得意的语言特性,请看这里:


a = "b"
print(_G[a])

请问这是不是你想要的?如果你非要强调“我要直接对"b"求值”,那我就没话说了,你是在拿男人的标准去衡量女人,当然能得出女人不好的结论了。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
77 [报告]
发表于 2011-08-17 14:29 |只看该作者
回复 70# starwing83
哦, 还有, 真要找虚荣心, 仅在C++上就可以找到我手软了, 有必要扯lisp么

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
78 [报告]
发表于 2011-08-17 14:30 |只看该作者
回复 75# OwnWaterloo


    很明确的告诉你,我目前没发现蛋疼的东西。至于let,我说的很明白,moonscript是没有let的,所以我没法写原汁原味的let,并不是说只能放let。是可以放任何东西ide,没有蛋疼的东西,就算是有,那绝对是bug,后期版本肯定会解决的。这个思想就是这样。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
79 [报告]
发表于 2011-08-17 14:31 |只看该作者
回复 77# OwnWaterloo


    所以就让我有点虚荣心呗,说得这么赤裸裸干嘛

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
80 [报告]
发表于 2011-08-17 14:31 |只看该作者
回复 68# starwing83


    啊,好嘛,明白了

    Thanks{:3_189:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP