Scheme 为什么我的else语句似乎不起作用?
。我正在努力自学一些计算机科学技能。我正在研究的问题需要我创造一种方法,从三个数字中选择两个最大的数字,然后找到两个数字的平方和Scheme 为什么我的else语句似乎不起作用?,scheme,Scheme,。我正在努力自学一些计算机科学技能。我正在研究的问题需要我创造一种方法,从三个数字中选择两个最大的数字,然后找到两个数字的平方和 (define (pro x y z) (cond( (and (< x y) (< x z)) (define a y)(define b z)) ( (and(< y x) (< y z)) (define a x) (define b z)) ( else ((define a x )(define b
(define (pro x y z)
(cond( (and (< x y) (< x z)) (define a y)(define b z))
( (and(< y x) (< y z)) (define a x) (define b z))
( else ((define a x )(define b y))))
(+ (* a a) (* b b))
(定义(pro x y z)
(cond((和(
当我在z为最小值或与最小值并列的情况下运行函数时,我得到以下错误:
Error: #<undef> is not a function [pro, (anon)]
错误:#不是函数[pro,(anon)]
为什么会出现此错误?如何修复
我一直在使用repl.it来运行这个程序,如果这很重要的话。首先,使用define的那种方式对于Scheme代码来说是完全奇怪的 在那之后,我发现代码有两个问题。第一个问题是,在else子句中有一个额外的paren层。下面是 ((定义a x)(定义b y)) 将对第一个定义求值并尝试将其作为过程应用。对(define…)求值将返回#unde,它是错误消息的来源
如果你解决了这个问题,你的下一个问题是你的平方和代码超出了你的cond定义的范围,你会发现a和b没有在那里定义。你应该这样做:
(define (max-of-3 x y z)
(cond
((and (< x y) (< x z)) (values y z))
((and (< y x) (< y z)) (values x z))
(else (values x y))))
(define (pro x y z)
(let-values (((a b) (max-of-3 x y z)))
(+ (* a a) (* b b))))
(定义(最多3 x y z)
(续)
((和(
甚至
(define (pro x y z)
(let-values
(((a b) (cond
((and (< x y) (< x z)) (values y z))
((and (< y x) (< y z)) (values x z))
(else (values x y)))))
(+ (* a a) (* b b))))
(定义(pro x y z)
(让我们看看价值观
((a)b)(cond)
((和(
为什么你的部门会说((define
),而另外两个部门只有(define
)?我想让它同时做这两个定义,我需要把它们放在一组额外的括号中,但是去掉那组括号让它工作起来了,非常感谢。