common lisp一道macro的题目
lisp吧
全部回复
仅看楼主
level 4
love_mely2 楼主
题目叙述有点长,链接:
http://www.cs.northwestern.edu/academics/courses/325/exercises/lisp-exs.php
Lisp #2: KEY-IF (Wilensky 13.2)
宏展开要这样,比如
例子1: (key-if flag :then x y)
展开是:
(cond (flag x y) (t nil))
例子2:(key-if flag :then x y :else z w)
展开是:
(cond (flag x y) (t z w))
对此我很困惑。key-if的参数是不固定长的,怎么把参数放到cond里面合适的位置呢?
我的思路是,分析key-if的参数,比如发现then,就怎样怎样。这样可以实现题目要求,但是宏展开也很长,不像上述那样简洁。
等高手给建议
2012年12月07日 20点12分 1
level 8
建议弄个函数分析then-else部分,分离相应的子句
2012年12月10日 16点12分 2
level 13
楼下继续建议
2012年12月11日 03点12分 3
1