【发布时间】:2011-01-07 11:03:55
【问题描述】:
我写了这个快速排序函数:
(defun quicksort (lst)
(if (null lst)
nil
(let ((div (car lst))
(tail (cdr lst)))
(append (quicksort (remove-if-not (lambda (x) (< x div)) tail))
(list div)
(quicksort (remove-if (lambda (x) (< x div)) tail))))))
但我不能将它重写为宏,它不起作用,例如,这个简单的 foo(递归求和 - 我知道,有点傻,但只是作为例子):
(defun Suma (lst)
(if (cdr lst)
(+ (Suma (cdr lst))
(car lst))
(car lst)))
工作正常,但宏:
(defmacro SumaMacro (lst)
'(if (cdr lst)
'(+ (prog (SUMAMACRO (cdr lst)))
(prog (car lst)))
'(car lst)))
似乎是错误的。有人对将递归函数重写为宏有什么建议吗?
【问题讨论】:
标签: recursion lisp common-lisp