1
该分配用于定义一个函数,该函数接受单个列表作为参数,并输出列表的最大值。我觉得我的嵌套“ifs”和“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)
)))))
当然,max函数将一个数字列表作为输入,并返回列表中最大的数字值。我试图做的是使用let将第一个值指定为最大值(“y”),然后逐个遍历每个值并将其与当前最大值进行比较。如果它更大,(“y”)会有一个新值。 我假设(cadr x)如果没有其他值,将返回null;会改为使用使用(cdr x)导致相同的问题? – 2011-02-26 03:27:07
@Decency:是的,你应该在测试中使用'(cdr x)'。你认为应该用递归调用的答案来做什么(即,假设你有一对'(x。z)',应该用'(max z)')来做什么? – 2011-02-26 03:28:53
我不太确定这一对你的意思,但我会尽力回应。我希望递归调用的答案能够被传递,并与在程序运行中递归获取的每个(汽车x)进行比较。我只是不确定y的范围是否会让我这样做,如果可以的话,如何去做。我意识到我正在将它看作基本上是一个do-while循环,但我不知道这是否是这种语言的正确方法。 – 2011-02-26 03:37:00