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。
相关阅读
python自定义函数中变量的scope 问题求教哪儿有经典的C++ programing 习题集嘛?c++里边protected member可以在自己所在类调用码?How to judge if it is a number in C++a question about matlab plot有谁读过Design Patterns Explained: A New Perspective on Obj (转载)【请教】fscanf 和 fstream 哪一个更好? (转载)问一个关于copy constructor的菜鸟问题。。。。。 (转载)Garbage collection 问题How to use reflection in C# to do this job?What does C++ program return to the operating system?请大家给看看c 里面的local static variable问个matlab import data的简单问题 (转载)C语言里的<<=是什么意思?问个算法问题Version Control Software (转载)一个诡异的问题求救!!how to create an instance of base class in its derived class definitionQuestion about friend in C++