1

この問題では、スキーム コードを作成するための参照として 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;
    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() {
    double v;
    v = TotalVolume();
    printf("%f\n",v);
}

今私はSchemeでコードを書きました。それは次のとおりです:

(define PI 3.14159265)

(define areac
  (lambda(d)
    (* PI (expt (/ d 2) 2))))

(write"Areac: ")
 (areac 5)
 (newLine)

 (define volumec
   (lambda (d h)
     (* (* (expt (/ d 2) 2) h) PI)))

 (write"Volumec: ")
 (volumec 5 5)
 (newLine)

 (define TotalVolume
   (lambda()
     (+ (volumec  1 1) (volumec 2 2) (volumec 3 3) (volumec 4 4) (volumec 5 5))))

 (define main 
   (lambda ()
     (* (TotalVolume) 1)))

 (write"Total Volume: ")
 (main)
 (newLine)

ここで、数式を記述する代わりに、 でvolumec参照areacしてvolumecから実行する必要があります。

4

2 に答える 2

0

ほんのいくつかのつまらないもの。

 (define TotalVolume
   (lambda()
     (let ((do-it (lambda (x) (volumec x x))))   
      (reduce + 0 
       (map do-it (list 1 2 3 4 5)))))

同じことを何度も入力していることに気付いた場合、人間のコンパイラーのように振る舞っています。これを回避する 1 つの方法は、高階関数を使用することです。

 (define main 
   (lambda ()
     (let ((v (TotalVolume)))
      (display v))))

REPL に返されるものと、実際に出力として表示されるものの違いに注意してください。表示、書き込み、表示、フォーマット、印刷などの機能を使用していない限り、画面に表示されるものは REPL の副作用であり、プログラムからの実際の出力ではありません。また、データ構造をファイルに保存するときと同じ形式で関数に戻すwriteことができるようにする場合にも使用されます。一般的には、人間が読み取るために表示するために使用されるものです。readdisplay

関数本体でローカル変数を定義するには、let 特殊形式 let を使用します。

于 2013-07-01T13:59:58.223 に答える