【发布时间】:2014-11-05 20:02:55
【问题描述】:
我需要编写一个程序,该程序在某个变量的某个范围内计算总和,例如:
(sum-range (i 2 N) (sin i))
一般:
(sum-range (iteration-variable begin end) my-body
为此:
产品也是如此。我不能使用任何循环/迭代构造,只为自己写一个,使用尾递归。
我需要用宏来完成,但不知道这些东西。我不要求完整的代码,只需要对宏和用法进行一些解释。首先,变量(iteration-variable)如何传递给sin?如何在宏中实现尾递归?
据我了解,宏创建了一些列表,该列表被替换为调用点并在那里进行评估。我对吗?所以我的解决方案是为 2 到 N 之间的每个 i 创建 sin i 列表,然后将 apply+` 加入到这个列表中。还好吗?
【问题讨论】:
-
那么对于 (i 1 1000) 你会在一个列表中创建 1000 个 sin 调用吗?这有意义吗?
标签: macros sum lisp tail-recursion