0

次の dayatype があります。

datatype complex = Rec of real * real | Polar of real * real;

および 2 つの関数:

- val real =
fn (Rec(x,y) ) => x
|  (Polar(r,a)) => r * Math.cos(a);

val real = fn : complex -> real

- val imaginary =
fn (Rec(x,y) ) => y
|  (Polar(r,a)) => r * Math.sin(a);

val imaginary = fn : complex -> real

さて、本は別の関数を定義しました:

- val add_complex =
fn (Rec(x, y), Rec(x', y')) => ( Rec( x + x', y + y') )
|  (Rec(x,y), z) => ( Rec( x + real(z), y + imaginary(z) ) )
|  (z, Rec(x, y)) => ( Rec( real(z) + x, imaginary(z) + y) )
|  (z,z') => (Rec( real(z) + real(z'), imaginary(z) + imaginary(z') ) );

val add_complex = fn : complex * complex -> complex

zfunctionの が何であるかわかりませんでしたadd_complex

  1. それは Polar ですか (つまり、Z=polar(a,b) と書くことができますか? もしそうなら、コンパイラはどのようにそれを知っていますか? 意味 - az を取得し、それを polar 変数に解析しますか?

  2. もしそれが極性でなければ、それは何でしょうか?

4

1 に答える 1

0

あなたのコードでは、 と の両方がzでありz'、最初のケースはPolar両方が であるすべての可能性をカバーしているRecためです。他のケースでも同様に、それぞれがそうでなければ、前のケースにキャッチされてしまうからです。したがって、半径と角度を安全に、またはより正確に書くことができます。zReczz'Polarz=Polar(a,b)z=Polar(r, a)

于 2011-06-23T19:34:06.747 に答える