h*i
2 楼
宏其实很简单的,就是一种编译前的预处理语法而已。
但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的,
比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。
这有两个原因:
1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如
纯数据,所以现在用Clojure实现一个功能的优先级是:
data > function > macro
能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是
以数据结构为中心的,比较declarative。
2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
总而言之,用Clojure不用宏没关系。
【在 t**r 的大作中提到】
: 最近在用clj干活。顺便看了看macro 倒吸一口冷气。这玩意真心掌握不了。
但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的,
比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。
这有两个原因:
1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如
纯数据,所以现在用Clojure实现一个功能的优先级是:
data > function > macro
能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是
以数据结构为中心的,比较declarative。
2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
总而言之,用Clojure不用宏没关系。
【在 t**r 的大作中提到】
: 最近在用clj干活。顺便看了看macro 倒吸一口冷气。这玩意真心掌握不了。
n*w
3 楼
有没有什么情况用宏特别合适?
不如
【在 h*i 的大作中提到】
: 宏其实很简单的,就是一种编译前的预处理语法而已。
: 但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的,
: 比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。
: 这有两个原因:
: 1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如
: 纯数据,所以现在用Clojure实现一个功能的优先级是:
: data > function > macro
: 能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是
: 以数据结构为中心的,比较declarative。
: 2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
不如
【在 h*i 的大作中提到】
: 宏其实很简单的,就是一种编译前的预处理语法而已。
: 但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的,
: 比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。
: 这有两个原因:
: 1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如
: 纯数据,所以现在用Clojure实现一个功能的优先级是:
: data > function > macro
: 能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是
: 以数据结构为中心的,比较declarative。
: 2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
h*i
4 楼
http://www.lispcast.com/when-to-use-a-macro
★ 发自iPhone App: ChineseWeb 8.7
【在 n*w 的大作中提到】
: 有没有什么情况用宏特别合适?
:
: 不如
★ 发自iPhone App: ChineseWeb 8.7
【在 n*w 的大作中提到】
: 有没有什么情况用宏特别合适?
:
: 不如
e*o
5 楼
Re
我觉得lisp 不是死在括号上 是死在macro上
lisp 类的语言声称syntax简单 但是加上macro 就意味着你永远学不完它的syntax
不如
【在 h*i 的大作中提到】
: 宏其实很简单的,就是一种编译前的预处理语法而已。
: 但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的,
: 比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。
: 这有两个原因:
: 1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如
: 纯数据,所以现在用Clojure实现一个功能的优先级是:
: data > function > macro
: 能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是
: 以数据结构为中心的,比较declarative。
: 2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
我觉得lisp 不是死在括号上 是死在macro上
lisp 类的语言声称syntax简单 但是加上macro 就意味着你永远学不完它的syntax
不如
【在 h*i 的大作中提到】
: 宏其实很简单的,就是一种编译前的预处理语法而已。
: 但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的,
: 比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。
: 这有两个原因:
: 1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如
: 纯数据,所以现在用Clojure实现一个功能的优先级是:
: data > function > macro
: 能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是
: 以数据结构为中心的,比较declarative。
: 2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
相关阅读
C#中如何share Pre-processing directivesBandit Algorithms for Website Optimization大家来看看这个纯Javascript实现的QR二维码生成器Linux in a Nutshell, 6th Edition学了一个星期linux内核,顿感人生层次提升了很多一个关于Delphi的八卦做机问题请教:stock ticker name 转换成 integer ID (转载)求助 -怎么把黑框去掉自学了 java scripthow to destruct list with loop?写thread safe程序现在也是程序员必须要掌握的了吧学visual c++对找工作有用吗?Memory Usage问题clarifyFMP supports UI thread in both Swing and SWTPython: how to match the price string starting with $ ?请教web service (backend)方面的architecture/design pattern方面的资料有谁用过NixOs?求做软件开发或者IT程序开发工作的同学帮忙填一个论文的survey有Reddit帐号的帮忙去顶一下啊