scheme中的嵌套条件和未指定的返回值

scheme中的嵌套条件和未指定的返回值,scheme,sicp,Scheme,Sicp,我试图编写一个函数,将三个参数中的两个最大值相加 (定义(suma b c)(cond (和(>=ab)(>=ac))(如果(>=bc)(+ab)(+ac))) (和(>=BA)(>=BC))(如果(>=AC)(+AB)(+BC))) (和(>=CA)(>=CB))(如果(>=AB)(+AC)(+BC))) ) 无论何时使用该函数,都会收到消息“未指定的返回值”。我不知道这里有什么不管用。即: (sumhighest 1 2 3) 编辑:一些人指出,这段代码对他们有用。我正在使用mit方案实现

我试图编写一个函数,将三个参数中的两个最大值相加

(定义(suma b c)(cond
(和(>=ab)(>=ac))(如果(>=bc)(+ab)(+ac))) (和(>=BA)(>=BC))(如果(>=AC)(+AB)(+BC))) (和(>=CA)(>=CB))(如果(>=AB)(+AC)(+BC))) )

无论何时使用该函数,都会收到消息“未指定的返回值”。我不知道这里有什么不管用。即:

(sumhighest 1 2 3)

编辑:一些人指出,这段代码对他们有用。我正在使用mit方案实现的解释器。它位于Ubuntu 18.04上名为mit scheme的包下。

这可能取决于实现,但正如评论中提到的,它对我们中的一些人有效。在没有更多上下文的情况下,我建议您将最后一个条件
(和(>=ca)(>=cb))
替换为一个
else
。或者切换到其他解释器:)

上面的代码对我有效,返回5。(我使用的是Racket,它可以与#lang Racket和#lang sicp一起使用)。您可能希望再次检查您是否正在运行您认为是的代码/定义,或者编辑您的问题以提供有关您正在使用的方案实现的更多信息。完成,谢谢!麻省理工学院方案我正在使用麻省理工学院方案10.1.10,它对我有效。您应该始终在
cond
中添加一个
else
,因此如果您确定如果前两个不匹配,您可以使用
else
og来回复谓词,并添加“else”作为附加术语。那么您的代码就不会受到错误选择的默认值的影响。规范将其留给了EIM实施,因此他们可以返回
5
香蕉
我可能不得不切换到racket。我知道这可以通过多种方式实现,这只是一种探索语言的努力。我对这个错误感到目瞪口呆,如果这类东西不起作用,大多数问题将需要不必要的解决方法。谢谢你的回答。