Scheme 方案程序错误
好的,我们刚开始在课堂上学习,我们的第一个作业已经完成了。现在我对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代码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
#包括
常数双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))
。在调用内置过程(如/
和*
)时,这是正确的,但在调用自己的过程时,这是错误的(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))