免费注册 查看新帖 |

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
101 [报告]
发表于 2011-08-17 15:44 |只看该作者
回复  starwing83


    噢!好的!

    那special-form和normal-form怎么区分? 非“关键字(specia ...
captivated 发表于 2011-08-17 15:41



    对的。

另外,lambda可不是define,define相当于set!但是是定义而不是赋值。lambda声明一个匿名函数,被绑定到这个函数的symbol就是normal-form(这么说不太精确,但是我怕把你再绕晕了,你理解就成)。

在Scheme里,special-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
102 [报告]
发表于 2011-08-17 15:48 |只看该作者
回复 100# OwnWaterloo


    不要跟我提js,谁提我跟谁急,我现在是典型的鸵鸟心态,谁敢把我的头拉起来我跟谁急

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

你怎么和js搅基了……

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

我确实被你这段绕晕了。
你就回答一个问题好了:  在这种用string当symbol的设计里, 想表达一个string该怎么办?
比如, 就是类似C代码的如下行为:

  1. size_t n = strlen("string_literal");
复制代码
在这样的设计里, 如何以字面形式写出 "string_literal"?

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


    我一想到GNOME3和Win8要用js开发界面心里就堵得慌……

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


    还不明白么?你写的就是string-literal,至于strlen是不是当它是个string-literal,这是strlen的事儿。


我再举个例子:(set! a b),b就是个literal啊,是个symbol啊,但是set!不当b是个symbol,它对b求值,然后赋给a,这是set!的选择不是b的选择。

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

得, 我的错, 我没说清楚, 看下面:

  1. char const* s = "string";
  2. strlen(s); /* vs */  strlen("literal");
复制代码
看第2行, 如果没有string与symbol之分, strlen该怎么办?
我要是strlen, 就只能gg思密达了……

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


    那symbol就是literal, literal就是symbol的意思

    比如C中
  1.    int b = 5;
复制代码
那么b就是个symbol嘛,5就是这个symbol的值嘛。

    如果
  1.     (set! var b)
复制代码
得到的结果是var == 5,而不是var == 'b'.虽然set!本身是个special-form, 在传递“函数参数”给set!时,传递的是‘b’而不是5,因为special-form不求值,传递的就是symbol ‘b’,但是因为set!的作用就是对'b'求值并将结果赋值给var,所以最终的结果是var == 5

    这样扯对了不?

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


    还是很简单啊……

假设strlen接受一个名字:

a = "abc"
abc = "abc"
strlen(a) vs strlen "abc"

假设strlen接受一个值:

a = "abc"
strlen(a) vs strlen "abc"


当然这样比较扯,实际上这是lisp的quote函数的“反函数”(当然这不是函数),实在不行你也可以实现一个quote,也有同样的功效。

论坛徽章:
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
110 [报告]
发表于 2011-08-17 16:29 |只看该作者
回复 108# captivated


    对了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP