Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 为什么我的else语句似乎不起作用?_Scheme - Fatal编程技术网

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
)?我想让它同时做这两个定义,我需要把它们放在一组额外的括号中,但是去掉那组括号让它工作起来了,非常感谢。