它很简单,看到你不是很注重细节和你的学习。你的代码包含无数的错误,你已经允许自己把习惯从其他语言带入你的学习计划。 DrRacket清楚地显示你的程序有语法错误,所以这是一个很好的开始。
我已经加粗的部分缺失的else
表达
(define (sum_of_greatest_squares a b c)
(if(> a b)
(if(> a c)
(if(> b c) ((+ (sqr a) (sqr c))(+ (sqr a) (sqr b))))
(+ (sqr a) (sqr c))
)
(if(> b c)
(if (> a c) ((+ (sqr a) (sqr b))(+ (sqr b) (sqr c)))
(+ (sqr c) (sqr b))))
))
代码的格式是坏的,因此就更难看到失误。
一起移动,这里的另一个大错误
((+ (sqr a) (sqr c))(+ (sqr a) (sqr b)))
不管你想要的,就像你可以在某些语言你不能只是把()
。 ()
用于Lisp/Scheme/Racket中的程序应用。
说a = 1
,b = 2
,并且c = 3
,上面的线将是
((+ (sqr 1) (sqr 3))(+ (sqr 1) (sqr 2)))
((+ 1 9 )(+ 1 4 ))
(10 5)
最后一行是(10 5)
它说“申请人数5至10号相当于” - 这是没有意义的。
你在代码中也会犯同样的错误。尝试先解决这些问题,然后更新您的问题。
ps:不要使用snake_case名称,如sum_of_greatest_squares
。 Schemers通常会将其格式设置为sum-of-greatest-squares
。
目前尚不清楚你的程序应该做什么。我的猜测是它应该平方两个最大的输入,然后求和它们。
您可以做if
表达一个巨大的层次结构,以决定哪两个参数与执行计算...但另一种方式是始终使用相同的两个参数来计算结果,但使用if
表达式将适当的参数移动到正确的位置。
认为这是一个横向的替代你的程序
(define (sqr x) (* x x))
(define (sum-of-greatest-squares a b c)
(cond ((< a b) (sum-of-greatest-squares b c a))
((< b c) (sum-of-greatest-squares a c b))
(else (+ (sqr a) (sqr b)))))
这将始终两者之和最大的数字的平方,但在一个更清洁的方式这样做
最后,约尔格提到你实际上没有在任何地方打印任何东西。我知道你的意思是暗示DrRacket没有在Interactions窗口中显示你的程序的结果。但是,如果你想明确地打印到控制台,看看display* and print* procedures
你是不是在任何地方打印任何东西。 –
http://stackoverflow.com/help/mcve – naomik