- 论坛徽章:
- 2
|
本帖最后由 OwnWaterloo 于 2012-02-16 19:18 编辑
回复 161# walleeee
>> 这种我觉得应该是a bignum_mul b,至于怎么实现这样,在c中可以封装,在c++中更是可以重载。但是这里你的确说中了lisp的一个好处,一致性。就是你后面说的“lisp对算术运算都一视同仁”,所谓一切都是函数。
haskell里面很容易,a `bignum_mul` b,所以才会被普遍使用。
C++就不如haskell容易,但还是会这样做。
a bignum_mul b 在C里面怎么搞……
>> 冤枉啊,我从来没觉得方便不重要,甚至认为方便是设计软件和编写程序最重要的考虑之一。我只是说现在的语言和以前的语言的计算能力是等价的。
嗯…… 我没抓住重点。 确实是等价的。
编程语言不就是在人与机器之间沟通么。
>> 包括你前面说的元编程是否就是宏能完成的?在c++中还可以用模版来完成。如果仅仅是这样,那我并不觉得你所谓的元编程有什么让人耳目一新的地方。
可以用模板完成, 但这就是与运行时计算一个表使用的是完全不同的机制了。
lisp是通过一组很小的、更为正交与范化的概念去组合出其他语言中的各种专用的概念。
这就是不同。
>> 比如前面那个bignum_mul(a, b),我也可以用:
>> #define BIGNUM_OP(a, op, b) ((bignum_##op)((a), (b)))
>> BIGNUM_OP(a, mul, b)
>> 来稿嘛,尽管看起来没你那个好看,但是你那个到处是括号也不见得比我好到哪里去,五十步笑一百步,半径八两。
喂喂, 不对哦。
BIGNUM_OP(a,mul,b), 这已经是前缀了好哇……
已经与前面说的(arithmetic-formula a * b)一样了……
而且能力还不如它强,比如:(formula a * b + c),还可以嵌入更复杂的公式, C的宏做不到的。
>> 很久以前lisp的确有很多大型项目是lisp写的,不过那都差不都是几十年前的事情了。至于说规范,我觉得不管是什么规范,一致才是核心,但是别人不是你,你也不是别人,所以一个团队里面多少有些不一致,这个就很麻烦。
这确实很麻烦……
有些特性可能并不是团队成员故意违反规范去使用,可能他确实不知道这里违反了。
以前还发过帖,要不要搞一个强制性的禁用C++某些特性的工具,代替人肉的code review。
但对于lisp,也许只要禁止(不包含)或者替换(使用了会在编译时报错)某些宏就可以达到目的了。
>> 反观去中国的大学,费用浪费倒是小事,还浪费你很多事情去搞些莫名其妙的东西。唉,不说了,心灰意冷。
我懂 |
|