免费注册 查看新帖 |

Chinaunix

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

最近入了本SICP,发现自己对Lisp没以前那么反感了……好像括号看起来还不错…… [复制链接]

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

如果你要找个能干活的……  我觉得clojure……
如果要找个能玩的……  那就haskell了……
怎么也不能去选erlang,go,或者ml系列的……

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

没弄明白之前可以不写嘛……

又不强迫你写 f . g……
可以先写 \x -> f (g x) 啊……    其他语言里也一样是反的……  f(g(x)) ……
然后 \x -> f $ g x ……   $ 就仅仅为了少写那个括号……  当然也有更奇葩的用法……
最终实在不能习惯 f . g 的话, 还可以 g >>> f 嘛……

论坛徽章:
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
53 [报告]
发表于 2012-03-29 02:33 |只看该作者
回复 50# OwnWaterloo


    这么说其实你就是吐槽一个名字问题罗。

注意mod_init至少必须是个函数,或者有个函数叫mod_init_神马的。

其实问题就在于:
1. USING名字不好
2. 他提到了一个其实是隐藏的接口mod_init


那么如果有个函数mod_init_并且说明这是实现相关,让你用宏mod_init,这样就好了?

只是小瑕疵嘛,而且是个人品味问题……从技术上讲是没啥问题。

至于范式……我觉得提到这个词的人10个里面有9个是装逼,剩下一个说的是数学术语……

论坛徽章:
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
54 [报告]
发表于 2012-03-29 02:36 |只看该作者
回复 52# OwnWaterloo


    这么说清楚多了,其实主要是不知道.的顺序以及$的范围(优先级)……很可恶啊……

其实不是自己写,自己写haskell一直都挺爽(前提是没编译错误,只要编译器开始抱怨我基本上就没辙了, 但是超过20行的基本上编译器都会抱怨……这个……),问题是看别人的代码时凌乱了。比如那个用foldr模拟foldl的,我愣是没看懂……

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

>> 这么说其实你就是吐槽一个名字问题罗。

不。


>> 至于范式……我觉得提到这个词的人10个里面有9个是装逼,剩下一个说的是数学术语……

你觉得他算那1/10?
于是我主要就是吐槽这个…… 其他的倒是细节。


什么称得上范式? 或者不说这么大, 值得写到一本书里?
比如kernel里的侵入式数据结构, 或者cii或者glib使用的那种非侵入式数据结构。
C里面如果你想要有数据结构库, 就这两种形式之一, 没其他可商量的。

他这种如此specific的东西……  他自己私下用用就算了……  既然敢拿出来装逼就不要怕被人吐槽……

论坛徽章:
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
56 [报告]
发表于 2012-03-29 03:12 |只看该作者
回复 55# OwnWaterloo


    也许够不着范式,不过就初始化而言,我觉得还是蛮好的嘛……

论坛徽章:
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
57 [报告]
发表于 2012-03-29 03:18 |只看该作者
回复 55# OwnWaterloo


    你的结论呢?我觉得稍微装装也不算啥,就事论事的话,他也有很牛的地方。对于共事来说,你的想法呢?

其实我觉得吧,他又不是做学问的,偶尔装装,也是可以理解的嘛= =比起老谭之流,至少还是好多了的。

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

我也是就事论事说他装啊……  没有否认他技术很牛叉,或者他不算好的leader什么的……
装的例子还有很多……  比如又想起一个以前给你说过那个 alloca + new (p) 什么的……

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


优先级与结合性…… 除了lisp,其他哪门语言里不可恶……
至少haskell还有静态类型检测,可以查出一部分不符合预期的使用……


自己写着爽就是了嘛……
关于编译错误,你自己也说过,是你没改掉写一大堆然后编译的习惯……


foldr 模拟 foldl …… 我擦……

  1. foldl f a bs = foldr (\b g x -> g (f x b)) id bs a
复制代码
注意 (\b g x -> g (f x b)) 是, 呃, 3元函数…… 姑且这么叫吧……
foldr (\b g x -> g (f x b)) id bs 是将 id 当作 init 来用…… 得到的是一个 \x -> foldl x bs
再应用一个 a 就是 foldl 了……

因为curried的关系,函数与值的界限不是很明显……
只有0元与1元函数…… 前者就是值……  多元函数是1元的currid form……

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

终于化简出来了……

根据foldr的定义:

  1. foldr f a [b0,b1,...,bp,bq,br]
  2. = (f b0 (f b1 ... (f bp (f bq (f br a)))))
复制代码
令:

  1. F = \b g x -> g (f x b)
复制代码
那么:

  1. foldr F id [b0,b1,...,bp,bq,br]
  2. = (F b0 (F b1 ... (F bp (F bq (F                      br id)))))    ; F = \...
  3. = (F b0 (F b1 ... (F bp (F bq ((\b g x -> g  (f x b)) br id)))))    ; b = br
  4. = (F b0 (F b1 ... (F bp (F bq ((\  g x -> g  (f x br))   id)))))    ; g = id
  5. = (F b0 (F b1 ... (F bp (F bq ((\    x -> id (f x br)))))))         ; x = y
  6. = (F b0 (F b1 ... (F bp (F bq (\y -> id (f y br))))))

  7. = (F b0 (F b1 ... (F bp (F                     bq (\y -> id (f y br))))))     ; F = \...
  8. = (F b0 (F b1 ... (F bp ((\b g x -> g (f x b)) bq (\y -> id (f y br))))))     ; b = bq
  9. = (F b0 (F b1 ... (F bp ((\  g x -> g (f x bq))   (\y -> id (f y br))))))     ; g = \y -> ...
  10. = (F b0 (F b1 ... (F bp ((\    x -> (\y -> id (f y        br)) (f x bq))))))  ; y = (f x bq)
  11. = (F b0 (F b1 ... (F bp ((\    x ->        id (f (f x bq) br))))))            ; x = y
  12. = (F b0 (F b1 ... (F bp (\y -> id (f (f y bq) br)))))

  13. = (F b0 (F b1 ... (F                     bp (\y -> id (f (f y bq) br)))))     ; F = \...
  14. = (F b0 (F b1 ... ((\b g x -> g (f x b)) bp (\y -> id (f (f y bq) br)))))     ; b = bp
  15. = (F b0 (F b1 ... ((\  g x -> g (f x bp))   (\y -> id (f (f y bq) br)))))     ; g = \y ->
  16. = (F b0 (F b1 ... ((\    x -> (\y id (f (f y        bq) br)) (f x bp)))))     ; y = (f x bp)
  17. = (F b0 (F b1 ... ((\    x ->     id (f (f (f x bp) bq) br)))))

  18. ...

  19. = \x -> id (f (f (f (f (f (f x b0) b1) ...) bp) bq) br)
复制代码
于是再将 x = a 代入:

  1. foldr F id [b0,b1,...,bp,bq,br] a
  2. = (\x -> id (f (f (f (f (f (f x b0) b1) ...) bp) bq) br)) a
  3. = f (f (f (f (f (f a b0) b1) ...) bp) bq) br
复制代码
就是foldl了……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP