【发布时间】:2019-11-08 23:29:11
【问题描述】:
我只是想让这个平均函数成为尾递归的。我已经设法让我的功能发挥作用,这需要付出相当大的努力。后来我去问我的教授我的工作是否令人满意,他告诉我
- 我的 avg 函数不是尾递归的
- avg 没有为包含多个元素的列表生成正确的输出
在过去的 2 个小时里,我一直在玩这个代码,但遇到了一些困难。任何人都可以帮助我确定我在这里不理解的内容。
对我的教授说他是 != 乐于助人
(defun avg (aList)
(defun sumup (aList)
(if (equal aList nil) 0
; if aList equals nil nothing to sum
(+ (car aList) (sumup (cdr aList)) )
)
)
(if
(equal aList nil) 0
; if aList equals nil length dosent matter
(/ (sumup aList) (list-length aList) )
)
)
(print (avg '(2 4 6 8 19))) ;39/5
我的测试预期结果会在 39/5 之后立即发表评论
【问题讨论】:
-
不嵌套
defun-s;它们旨在成为顶级定义构造。尽管有嵌套,sumup名称仍会输入到全局环境中。本地函数是使用flet或labels创建的。 -
是的,我的教授给我的另一个注意事项是不要在另一个函数中使用 defun
标签: recursion lisp common-lisp tail-recursion