首先,这是一项作业,但我只是在寻找提示或如何完成此任务的伪代码。
我需要使用递归来求和列表中的所有项。但是,如果遇到列表中不是数字的元素,它需要返回空集。以下是我的尝试:
(DEFINE sum-list
(LAMBDA (lst)
(IF (OR (NULL? lst) (NOT (NUMBER? (CAR lst))))
'()
(+
(CAR lst)
(sum-list (CDR lst))
)
)
)
)
这个失败是因为无法将空集添加到其他元素中。通常,如果不是数字,我会返回0并继续处理列表。
if
语句和一个let
。使用带有两个参数的版本(也许使用一个简单调用(inner-function x 0)
的包装函数)可能是最好的方法。此外,如果你已经遇到了尾递归,那么带有两个参数的版本是尾递归的,而任何一个带有一个参数的版本都不会是。 - Retief