免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4013 | 回复: 12
打印 上一主题 下一主题

希望开通新的语言板块 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
1 [报告]
发表于 2016-07-21 19:47 |显示全部楼层
即使开通了。。。  估计也很冷清。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2016-07-22 19:43 |显示全部楼层
回复 6# 104359176

这个版主。。。 是在说我吗。。。


首先。。。 要问我赞不赞成开通。。。 那肯定是赞成的。。。
反正。。。 除了动动嘴之外。。。 又没我什么事。。。
比如。。。 这个论坛增加一个版是否要改代码(比较搓的情况)? 还是只是在后台操作一下(比较好的情况)?后续要多少人管理或者增加现有管理人员的多少负担(又不是我发工资)?


其次。。。 前面只是估计一下状况而已。。。 这么激动。。。
如果是perl6或者是swift这样的语言我觉得还不好说。。。
对lisp板而言, 我觉得估计的很准, 所谓的惊喜不会出现。。。
要说为什么。。。  因为lisp全体加起来也是小众语言。。。 newlisp本身是也是小众中的小众。。。

开通一个新的lisp板?  http://bbs.chinaunix.net/thread-4086218-1-1.html 这是CU的C/C++板块的函数式编程子板块(CU就是这么分类的。。。)里一个3年前的帖子:
——你喜欢函数式编程?
——是啊。
——太好了我也是,你喜欢 Erlang 、Lisp 还是 Haskell ?
—— Lisp 。
——太好了我也是,你喜欢 Common Lisp 、Emacs Lisp 、Scheme 还是 Clojure ?
—— Scheme 。
——太好了我也是,你喜欢 MIT Scheme 、MzScheme 、DrScheme 还是 Guile ?
—— MIT Scheme 。
——太好了我也是,你喜欢 7.5 版还是 7.4 版?
—— 7.5 。
——滚!异端!


虽然可能没有上面这么严重, 将所有lisp合并在一个板块讨论肯定是有问题的。

就比如这个所谓的函数式编程的板。。。 提到函数式编程或者函数式编程语言, 有的人头脑里反应出的是javascript, 有的人头脑里反应出的是haskell。
你可以去看看那个板块里, 最近就有人问了一堆问题, “函数式编程里该怎么怎么怎么。。。” 这让人很难办啊。。。
就好比, 假设有了一个lisp板块, 有人来问一个“该怎么理解lisp里的宏”?
问的人他心里想的是一个lisp, 看的人们心里想很可能又是各种不同的lisp —— 比且newlisp, scheme, common lisp三者的宏的机制恰好又是完全不同的 —— 最终结果只能是:
1. 要么鸡同鸭讲一堆。。。
2. 要么泛泛而谈。。。
这个是将所有的lisp, 或者所有的函数式编程, 函数式编程语言放到同一个板块肯定会出现的问题。。。

那么。。。  各自分开开一个板块? 本来就少的人就更分散了。。。
而且, 开哪几个板newlisp板? scheme板? common lisp板?
那racket要闹了, racket is not a scheme, 我们要单独划一个板讨论。
那用clojure的人不服气了, 凭什么不给我开?
picolisp是不是又有意见? 此处还可以插入各种lisp方言。。。
要论相对人气来开, 也肯定首先是scheme和common lisp而不会是newlisp。

说了半天。。。  解决办法是什么? 这种小众语言该怎么找到大部队?
我不知道newlisp是啥情况, 就只说clojure, 那就只能是大部队去哪就跟着去哪。。。 google groups, irc, slack, ...
没有我在哪所以就应该把大部队也召集过来的道理。。。


最后。。。 关于版主。。。 你是不是觉得版主都是和CU是一伙的? 是CU内部的?
至少我不是的。。。 CU本部我都没去过。。。 我的发言也肯定不代表CU官方意见。。。
如果你觉得我不懂那些什么道理, 也只是我不懂, 不是CU不懂。。。

所以我才不想当个什么鬼版主嘛。。。 想撕个逼都不方便。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3 [报告]
发表于 2016-07-22 22:44 |显示全部楼层
104359176 发表于 2016-07-22 20:43
所得到的参数是以数组方式传递过来的,这个时候,如何把这些参数全部传递进去呢?


你说的是这个功能吧。。。 newlisp:

  1. > (+)
  2. 0
  3. > (apply + '())
  4. 0

  5. > (+ 1)
  6. 1
  7. > (apply + '(1))
  8. 1

  9. > (+ 1 2)
  10. 3
  11. > (apply + '(1 2))
  12. 3
复制代码
这个功能其实还是挺常见的: http://rosettacode.org/wiki/Variadic_function
在scheme, common lisp, emacs lisp, clojure里面它都叫apply。

common lisp和emacs lisp是lisp-2, 于是与lisp-1有区别了, 需要特殊的quote: (apply #'+ '(1 2 3))
scheme和clojure都是lisp-1, 但scheme的apply要求最后一个参数必须是list, 而clojure只要求最后一个参数是seq。

它们又都与newlisp的apply有区别。 newlisp的apply的参数个数是固定的, 两个, 第1个是函数, 第2个是传递给它的所有参数。
而其他4种lisp的apply参数个数是可变的, 至少是2个。


这就是我前面说的, 将这些lisp混在一起, 哪怕很小的一个方面(给Variadic function传递参数), 都会出现这些情况:

1. 泛泛而谈
类似于, 哦, 这个功能一般叫做apply, 在我平时用的lisp里是这样的, 你问的那个lisp你自己去查手册或者google一下吧。

2. 鸡同鸭讲
比如一个用lisp1的人问, 而回答的人好心的把代码贴出来, 但这个人心里想的卻是一个lisp-2, 于是(apply #'+ '(1 2 3)) 肯定会在newlisp与scheme里出问题。

3. 浮于表面
(apply #'+ '(1 2 3)) 虽然是lisp-2的典型写法, 然而在clojure里面它恰好不会出问题。 但这不是clojure里的典型/习惯(idiomatic)用法。

用apply的参数个数不同造成的影响举例:
3.1 问的人用的是newlisp, 回答的人告诉它 (apply f x1 x2 (list x3 x4 ...)) 等效于 (f x1 x2 x3 x4 ...) ,  那问的人肯定会有一天要出错, 因为newlisp里面apply只接受两个参数。
比如这还算好的, 出了错他就知道newlisp里的apply有不同了。

3.2 反过来的情况更糟糕。 问的人用的是lisp-1, 回答的人用的是newlisp, 并且给问的人造成一种apply只能接受2个参数而且第2个必须是list的印象。
于是有些情况下, 他就会写成 (apply f (cons a (cons b xs))) , 而不是idiomatic的(apply f a b xs)。


So。。。 我感觉CU是不可能会为各种lisp单独开板的。。。
CU也许可能会为lisp一起开个板。。。  但这种混合社区很有可能吃到“二手肉”。。。 不管是对提问的人还是回答的人来说, 都是浪费时间。。。
这种混合板上发布点各种lisp甚至新的lisp方言这种消息还是不错的。。。
真要想学好这种小众语言, 去各自的社区混才是王道。。。


PS: 对这个需求来说用eval太过了。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
4 [报告]
发表于 2016-07-22 23:11 |显示全部楼层
104359176 发表于 2016-07-22 20:43 方言多,不是 Lisp 的错,也不是不能开设新论坛的原因。

确实不是lisp的错。 也不是不能开新论坛的原因。
该不该开新板块, 那是CU自己应该做的决策。
我只是觉得, 哪怕开了, 也没什么用。。。


104359176 发表于 2016-07-22 20:43 不同的方言,可以放在一起讨论,语法只是披在相同编程概念的不同风格而已。

存在一类程序员, 他们会很多编程语言, 但写出来的程序都大同小异。 所谓用自己的思想去驾驭编程语言的那一类?
比如“开发ios(android)要用objc(java)?” 那就学呗, 怎么定义变量, 怎么分支, 怎么循环, 怎么写函数。。。  然后就可以开始编程了。

但这类程序员都不会有事没事去学lisp的吧。。。 学来干嘛。。。 又没太多这种非lisp不可的工作。。。
如果不学透彻点。。。 还不如去学主流语言呢。。。


104359176 发表于 2016-07-22 20:43 你是版主,比我草根强多了,你的意见相对我来说,更能让CU的管理者重视。

都是草根。。。  最多草根围观者和草根志愿者的区别而已。。。


104359176 发表于 2016-07-22 20:43 很多人因为 Lisp 方言众多,而放弃了学习这门优秀的语言。

我觉得放弃lisp的最大原因是(((((())))))吧。。。
你看类C语法的语言这么多, c++, java, c#, javasript, go... 它们不都挺火的么。。。


104359176 发表于 2016-07-22 20:43 很多人同等算法下,Lisp 相对最短。

这个还是不要这么说。。。 免得撕·逼。。。。


104359176 发表于 2016-07-22 20:43
方言多,争论多,不就是论坛兴旺的好办法吗?

撕·逼一时爽。。。 但感觉最终用处不大。。。
兴旺倒可能是兴旺。。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
5 [报告]
发表于 2016-07-25 22:52 |显示全部楼层
回复 11# 104359176

比如 cons :

  1. > (list (cons) (cons 1) (cons 1 2) (cons 1 2 3))
  2. (() (1) (1 2) (1 2))
复制代码
不像+接受任意多个参数, cons最多只接受2个, 多的会忽略。

如果用apply而不是直接传递:

  1. > (apply cons '())
  2. ()
  3. > (apply cons '(1))
  4. (1)
  5. > (apply cons '(1 2))
  6. (1 2)
  7. > (apply cons '(1 2 3))
  8. (1 2)
复制代码
一样的啊。。。   不可意料的结果是啥。。。


关于array。
如果确实是想将array而不是list当作的参数传递给函数, 用array-list转换成list:

  1. > (apply cons (array-list (array 3 '(1 2 3))))
  2. (1 2)
复制代码
关于@。
这个是想表达个啥意思。。。 "@x" 不是将"x"转换成list或者array或者进行别的什么魔法操作, "@x"是一个symbol哦。。。

  1. > (length "@array-list") ; 这个字符串长度是11, 方便后面对比
  2. 11
  3. > (read-expr "@array-list") ; 读取一个expression
  4. @array-list
  5. > $count ; 可以看到整个字符串是被消耗完了的, 一个不剩
  6. 11
  7. > (symbol? (read-expr "@array-list")) ; 整个字符串被读取为一个symbol
  8. true
  9. > @array-list ; 默认是没有绑定的
  10. nil
复制代码
"@three-args-array" 同上:

  1. > (length "@three-args-array")
  2. 17
  3. > (read-expr "@three-args-array")
  4. @three-args-array
  5. > $count
  6. 17
  7. > (symbol? (read-expr "@three-args-array"))
  8. true
  9. > @three-args-array
  10. nil
复制代码
不可意料的结果是因为对@理解有误吧。。。?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2016-07-25 23:17 |显示全部楼层
本帖最后由 OwnWaterloo 于 2016-07-26 19:25 编辑

回复 12# 104359176

这个我自己是同意的。。。

最近。。。 被一个问题问懵逼过。。。
"python 里面 v for h 是什么意思"。。。 纳尼???

最终, 发现代码是这个样子: "d = { k : v for h,v in zip(seq1, seq2) }"

lisp里很少会出现这种“断句”出错的情况。。。
语法就symbol, pair, string, number, ... 可能还会再出现一些, 但不会特别多。。。
语法上没什么magic的地方。。。


然而。。。 这并没有什么卵用。。。 不管是讲道理、 安利、 无脑吹。。。 大多数人看到lisp就是这个样子:


而看到某个语言宣称"我们借鉴C语法"就是这个样子:

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
7 [报告]
发表于 2016-07-25 23:29 |显示全部楼层
104359176 发表于 2016-07-23 12:15
关于宏,所有语言的宏实现都是一个原理,就是延迟参数的求值。


关于这个。。。  因为涉及到newlisp。。。  所以不太好解释。。。
"宏"(macro)这个词在各种lisp里会有一些区别。。。

比如在scheme, common lisp, emacs lisp, clojure里, scheme就和后3者区别很大。
在后3者里面继续细分, clojure又和前两者有所区别。

但是把newlisp放到里面进行对比的话, 首先就是newlisp和其他lisp的区别最显著而会被分出去。。。


比如。。。 你用newlisp写一个if-not宏吧。。。 接受固定的3个表达式, 功能与if相反。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
8 [报告]
发表于 2016-07-25 23:58 |显示全部楼层
本帖最后由 OwnWaterloo 于 2016-07-26 19:31 编辑

删。。。

1.png (151.88 KB, 下载次数: 49)

四老外1

四老外1

2.png (132.9 KB, 下载次数: 48)

四老外2

四老外2

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
9 [报告]
发表于 2016-07-26 01:25 |显示全部楼层
回复 26# 104359176

快写个if-not啊。。。   写了就会知道自己受newlisp影响多深

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
10 [报告]
发表于 2016-07-26 19:19 |显示全部楼层
回复 28# 104359176

用宏实现 if-not: (if-not test-expr then-expr else-expr)
如果test-expr的求值结果为false, 就对then-expr求值并返回其结果,否则对else-expr求值并返回其结果。

之所以选它,并不是说它有多么好。。。 而是它比较简单, 比如不用涉及变长参数如何处理, 这样可以尽量弱化不同lisp里面的宏的区别。
但即使是这样的宏, newlisp和其他语言也是有区别的, 相当大的区别。。。

你先写写看吧。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP