免费注册 查看新帖 |

Chinaunix

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

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

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


    前段时间学习使用emacs 于是要学习emacs-lisp 去wiki看了下,有个中文页面介绍说,

    “Lisp的表达式是一个原子(atom)或表(list),原子(atom)又包含符号(symbol)与数值(number);表是由零个或多个表达式组成的”...
    我立刻就想到了树~

    不过我老是半途而废,至今看到lisp的一堆括号就头痛~认真地说,我也学习过好几个小时的lisp了{:3_189:}

    关于《Structure and Interpretation of Computer Programs》这本书,表示一定要买来看,嗯

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
62 [报告]
发表于 2011-08-17 13:31 |只看该作者
回复 61# captivated

emacs这东西, 即使不用它编辑, 只用它来读info文件也是不错的。

然后, elisp就看elisp的info就行……  其他什么书都别看……  会被误导的……
比如将special-form与其他语言的语句作类比就是一种误导……
而且 lisp 真心不难, 核心部分简洁统一得难以置信……  只有少数几条例外规则……

然后…… emacs 就是你掌中玩物了……

论坛徽章:
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
63 [报告]
发表于 2011-08-17 13:47 |只看该作者
回复 54# OwnWaterloo


    我显然是知道的嘛,但是也要照顾一下围观群众嘛


我记得最开始我们讨论perl的那个“隐式lambda”的时候,我就特别指出了,决定是否参数被求值是一个十分有用的特性。

论坛徽章:
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
64 [报告]
发表于 2011-08-17 13:50 |只看该作者
回复 56# OwnWaterloo


    显然可以,表达式的特征之一就是可以嵌套的嘛~~

a = for i = if 1 == 1 then 1 else 2, if 2== 2 then 10 else 20 do if x % if1==1 then 2 else 4 == 0 then x

这样也是可以的,不过可读性嘛…………

论坛徽章:
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
65 [报告]
发表于 2011-08-17 13:52 |只看该作者
回复 58# OwnWaterloo


    你这个代码维护起来就麻烦了……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
66 [报告]
发表于 2011-08-17 13:54 |只看该作者
决定是否参数被求值是一个十分有用的特性。
starwing83 发表于 2011-08-17 13:47


这貌似又只剩下lisp才有了?
未求值之前那个东西, symbol, 又只剩下lisp才有了?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
67 [报告]
发表于 2011-08-17 13:56 |只看该作者
回复 64# starwing83

注意嵌套的是let, 不是if, 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
68 [报告]
发表于 2011-08-17 13:59 |只看该作者
回复 61# captivated


    想学Lisp?我现在就教会你。

Lisp由两种东西组成,表和非表

非表有很多,其中一种叫做符号(symbol)。

表是用圆括号括起来的序列,序列的每一项可以是任何东西,包括表和非表。

如果一个表被执行,那么默认其第一项作为操作,后面几项作为操作的参数。

表执行的时候,参数是否被求值是根据默认第一项而定的。

Over。

下面是举例时间。

(a b c)是一个表,表的每一项是个symbol

((a b) c (d e)) 是个表,表有三项,第一项和第三项也是表。

'a 实际上是(quote a)是个表,表有两项,每项是个symbol

(set! a b)也是个表,有三项,每项都是symbol。


如果要执行的时候,随着你用的版本的不同,表的第一项是否求值是不定的,比如elisp不会对表的第一项求值,而cl/scheme会。

(set! a 'b)是个表,实际上是(set! a (quote b)),首先取出set!,在Elisp里是取set!的function-cell,你可以认为是取了操作,而在Scheme里面是对set!求值,两者都得到了一个special-form操作,因为是special-form,参看ow的解释,不对参数求值,所以其参数是symbol a和表(quote b)

然后,set!自己对第二个参数即(quote b)求值,然后将得到的值绑定到a身上,因此a的值成为了符号b。(quote也是个special-form,负责原封不动地返回自己的参数,不求值)。

于是,a的值就是'b了。你可以显示一下:
(display a) --> b

明白了么?

论坛徽章:
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
69 [报告]
发表于 2011-08-17 14:02 |只看该作者
回复 67# OwnWaterloo


    可行,不过,moonscript目前没有let,你可以这么写:

for i = 1, (-> 这里是其他操作)() do ... end

论坛徽章:
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
70 [报告]
发表于 2011-08-17 14:04 |只看该作者
回复 66# OwnWaterloo


    大多数脚本语言都有symbol,而且很遗憾的说,连C++0x都有了……(只不过是字符串)。

顺带说一下,symbol作为原生支持也出现在Haskell、ErLang等一打函数式语言里面,Symbol是函数式的标配。

决定是否求值,perl做得到,你只需要在参数列表写上&,那么这一项就不会求值了。

所以,收回你可怜的虚荣心吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP