方案程序错误
Scheme Procedure error
好的,所以我们刚刚开始学习 class 中的方案,我们的第一个作业就完成了。现在我是 scheme 的新手,所以我仍然不确定我所做的是否正确,但到目前为止,我的代码中有一个家庭作业问题。
问题 3:
3.1 定义一个全局名称 PI 并将值 3.14159265 关联到它。 [3]
3.2 定义一个全局Scheme 过程(areac d),其功能与C 程序中定义的相同。 [3]
3.3定义一个全局Scheme过程(volumec d h)[3]
3.4定义一个全局Scheme过程(TotalVolume);无参数 [3]
3.5 定义一个全局Scheme过程(main);无参数
这是为我们提供的示例 C 代码
#include <stdio.h>
const double PI = 3.14159265;
double areac(double d) {
double a;
a =PI*(d/2)*(d/2);
return a;
}
double volumec(double d, double h) {
double a, v;
a = areac(d); // call areac() here
v = a*h/3;
return v;
}
double TotalVolume() {
double v1, v2, v3, v4, v5;
v1 = volumec(1, 1);
v2 = volumec(2, 2);
v3 = volumec(3, 3);
v4 = volumec(4, 4);
v5 = volumec(5, 5);
return v1+v2+v3+v4+v5;
}
void main() {
TotalVolume();
这就是我的方案:
(define PI 3.14159265)
(define (areac d)
(let*
(
(a (* (* PI (/ d 2)) (/ d 2)))
)
(display a)))
(define (volumec d h)
(let
(
(a (areac(d))))
(let ((v (/ (* a h) 3)))
(display v) ))
)
(define (TotalVolume)
(let*
(
(v1 (volumec(1 1)))
(v2 (volumec(2 2)))
(v3 (volumec(3 3)))
(v4 (volumec(4 4)))
(v5 (volumec(5 5)))
)
(display (+ (+ (+ (+ v1 v2) v3) v4) v5))))
(define main
(TotalVolume))
但是当我 运行 我的程序时出现错误:
申请:不是程序;
需要一个可以应用于参数的过程
给定:1
参数...:
我在 TotalVolume 过程中遇到错误,它从 (volumec(1 1)) 指向 (let*
如果有人可以帮助我解决我做错的事情,我们将不胜感激
谢谢!
几个问题:
您的程序没有 return 值,它们只显示它们计算出的值。
您没有将 main
定义为过程,因为您没有在名称两边加上括号或使用 lambda
表达式定义它。
过程的参数不放在额外的括号中。语法是 (proc arg1 arg2)
,而不是 (proc (arg1 arg2))
。你在调用 /
和 *
等内置过程时做对了,但在调用你自己的过程时却做错了。
(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))
好的,所以我们刚刚开始学习 class 中的方案,我们的第一个作业就完成了。现在我是 scheme 的新手,所以我仍然不确定我所做的是否正确,但到目前为止,我的代码中有一个家庭作业问题。
问题 3:
3.1 定义一个全局名称 PI 并将值 3.14159265 关联到它。 [3]
3.2 定义一个全局Scheme 过程(areac d),其功能与C 程序中定义的相同。 [3]
3.3定义一个全局Scheme过程(volumec d h)[3]
3.4定义一个全局Scheme过程(TotalVolume);无参数 [3]
3.5 定义一个全局Scheme过程(main);无参数
这是为我们提供的示例 C 代码
#include <stdio.h>
const double PI = 3.14159265;
double areac(double d) {
double a;
a =PI*(d/2)*(d/2);
return a;
}
double volumec(double d, double h) {
double a, v;
a = areac(d); // call areac() here
v = a*h/3;
return v;
}
double TotalVolume() {
double v1, v2, v3, v4, v5;
v1 = volumec(1, 1);
v2 = volumec(2, 2);
v3 = volumec(3, 3);
v4 = volumec(4, 4);
v5 = volumec(5, 5);
return v1+v2+v3+v4+v5;
}
void main() {
TotalVolume();
这就是我的方案:
(define PI 3.14159265)
(define (areac d)
(let*
(
(a (* (* PI (/ d 2)) (/ d 2)))
)
(display a)))
(define (volumec d h)
(let
(
(a (areac(d))))
(let ((v (/ (* a h) 3)))
(display v) ))
)
(define (TotalVolume)
(let*
(
(v1 (volumec(1 1)))
(v2 (volumec(2 2)))
(v3 (volumec(3 3)))
(v4 (volumec(4 4)))
(v5 (volumec(5 5)))
)
(display (+ (+ (+ (+ v1 v2) v3) v4) v5))))
(define main
(TotalVolume))
但是当我 运行 我的程序时出现错误:
申请:不是程序;
需要一个可以应用于参数的过程
给定:1
参数...:
我在 TotalVolume 过程中遇到错误,它从 (volumec(1 1)) 指向 (let*
如果有人可以帮助我解决我做错的事情,我们将不胜感激
谢谢!
几个问题:
您的程序没有 return 值,它们只显示它们计算出的值。
您没有将
main
定义为过程,因为您没有在名称两边加上括号或使用lambda
表达式定义它。过程的参数不放在额外的括号中。语法是
(proc arg1 arg2)
,而不是(proc (arg1 arg2))
。你在调用/
和*
等内置过程时做对了,但在调用你自己的过程时却做错了。
(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))