Scheme Max函数(递归)

时间:2011-02-26 03:06:16

标签: recursion scheme racket

赋值是定义一个函数,该函数接受单个列表作为参数并输出列表的最大值。我觉得我的嵌套“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)
     )))))

1 个答案:

答案 0 :(得分:2)

我在您的代码中看到了一些错误:首先,(null? (cadr x))不是类型正确的; x是一个数字列表,因此(cadr x)是一个数字,永远不会为空。此外,在第二次与y绑定后,您没有使用let。您能否尝试用英语描述列表中的max函数应该做什么?