【问题标题】:Scheme Procedure error方案程序错误
【发布时间】:2015-04-13 03:08:55
【问题描述】:

好的,所以我们刚开始在课堂上学习计划,我们的第一个作业已经完成。现在我是计划的新手,所以我仍然不确定我所做的是否正确,但到目前为止,我的一个作业问题的代码存在问题。

问题 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*

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

谢谢!

【问题讨论】:

  • "application: not a procedure" in binary arithmetic procedures 的可能副本。正如 Barmar 指出的那样,在某些地方你有 (proc (arg1 arg2)) 而不是 (proc arg1 arg2)。前者尝试评估(arg1 arg2),这意味着评估arg1 和arg2,将arg1 的值作为一个过程应用,并将arg2 的值作为参数。当然,arg1 的值不是过程,因此消息“应用程序:不是过程”。

标签: scheme procedure


【解决方案1】:

几个问题:

  1. 您的过程不返回值,它们只是显示它们计算的值。

  2. 您没有将main 定义为过程,因为您没有在名称周围加上括号或使用lambda 表达式定义它。

  3. 过程的参数没有放在额外的括号中。语法是(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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多