赋值是定义一个函数,该函数接受单个列表作为参数并输出列表的最大值。我觉得我的嵌套“ifs”和“let”非常过分,而且功能在不打印答案的情况下提前终止。我已经找到了一个使用let来正确使用递归但是已经空了的示例,DrRacket中的调试功能对于跟踪递归调用并不是非常有用。
感谢任何帮助,谢谢。
(define max
(lambda (x)
(let ((y (car x)))
(if (null? (cdr x))
y
(let ((m (max(cdr x))))
(if (> m y)
m
y)
)))))
答案 0 :(得分:2)
我在您的代码中看到了一些错误:首先,(null? (cadr x))
不是类型正确的; x
是一个数字列表,因此(cadr x)
是一个数字,永远不会为空。此外,在第二次与y
绑定后,您没有使用let
。您能否尝试用英语描述列表中的max
函数应该做什么?