У нас есть следующий тип:
datatype complex = Rec of real * real | Polar of real * real;
и две функции:
- 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
Я не сделалНе понимаю, что такое z
в функции add_complex
.
Является ли она полярной (имеется в виду, я могу написать Z = полярная (a, b)? Если этоТак откуда же это знает компилятор? Имеется в виду - он получает az и анализирует его в полярную переменную?
Если он не полярный, то что же это может быть?