Scheme 方案程序错误

Scheme 方案程序错误,scheme,procedure,Scheme,Procedure,好的,我们刚开始在课堂上学习,我们的第一个作业已经完成了。现在我对scheme还不熟悉,所以我仍然不确定我所做的是否正确,但到目前为止,我对其中一个家庭作业问题的代码有问题 问题3: 3.1定义全局名称PI并将值3.14159265与之关联。[3] 3.2定义一个与C-程序中定义的功能相同的全局方案程序(区域C d)。[3] 3.3定义全局方案程序(卷d h)[3] 3.4定义全局方案程序(总体积);无参数[3] 3.5定义总体方案程序(主要);无参数 这是给我们的示例C代码 #包括 常数双PI

好的,我们刚开始在课堂上学习,我们的第一个作业已经完成了。现在我对scheme还不熟悉,所以我仍然不确定我所做的是否正确,但到目前为止,我对其中一个家庭作业问题的代码有问题

问题3:

3.1定义全局名称PI并将值3.14159265与之关联。[3]

3.2定义一个与C-程序中定义的功能相同的全局方案程序(区域C d)。[3]

3.3定义全局方案程序(卷d h)[3]

3.4定义全局方案程序(总体积);无参数[3]

3.5定义总体方案程序(主要);无参数

这是给我们的示例C代码

#包括
常数双PI=3.14159265;
双区域C(双d){
双a;
a=PI*(d/2)*(d/2);
返回a;
}
双容量(双d,双h){
双a,v;
a=areac(d);//在此处调用areac()
v=a*h/3;
返回v;
}
双总音量(){
双v1、v2、v3、v4、v5;
v1=体积(1,1);
v2=体积(2,2);
v3=体积(3,3);
v4=体积(4,4);
v5=体积(5,5);
返回v1+v2+v3+v4+v5;
}
void main(){
总体积();
这就是我对这个计划的看法:

(定义PI 3.14159265)
(定义(区域C和d)
(让我们*
(
(a(*(*PI(/d2))(/d2)))
)
(显示a)))
(定义(体积d h)
(让
(
(a(C(d)区)
(让((v(/(*ah)3)))
(显示五)
)
(定义(总体积)
(让*
(
(v1(第1卷)
(v2(第2卷)
(第3卷)
(第4卷(第4卷)
(v5(第5卷)
)
(显示(+(+(+(+(+v1 v2)v3)v4)v5)))
(定义主
(总体积)
但是,我在运行程序时出错:

应用:不是一个程序

应为可应用于参数的过程

给定:1

论点…:

我在TotalVolume过程中得到一个错误,它从(volumec(11))指向(let)*

如果有人能帮我解决我做错的事情,我将不胜感激

谢谢!

有几个问题:

  • 您的过程不返回值,它们只显示计算的值

  • 您没有将
    main
    定义为过程,因为您没有在名称周围加括号,也没有使用
    lambda
    表达式定义它

  • 过程的参数不会放在额外的括号中。语法是
    (proc arg1 arg2)
    ,而不是
    (proc(arg1 arg2))
    。在调用内置过程(如
    /
    *
    )时,这是正确的,但在调用自己的过程时,这是错误的

  • 正如Barmar指出的,在您有
    (proc(arg1 arg2))
    而不是
    (proc arg1 arg2)
    的地方,可能存在重复。前者尝试评估
    (arg1 arg2)
    ,这意味着评估arg1和arg2,将arg1的值作为过程应用,并将arg2的值作为参数。当然,arg1的值不是过程,因此会显示消息“应用程序:不是过程”。
    (define PI 3.14159265)
    (define (areac d)
      (* (* PI (/ d 2)) (/ d 2))))
    (define (volumec d h)
      (let ((a (areac d)))
        (/ (* a h) 3)))
    (define (TotalVolume)
      (let ((v1 (volumec 1 1))
            (v2 (volumec 2 2))
            (v3 (volumec 3 3))
            (v4 (volumec 4 4))
            (v5 (volumec 5 5)))
        (+ v1 v2 v3 v4 v5)))
     (define (main)
       (TotalVolume))