Article View: comp.lang.modula2
Article #296Defining Operators
From: Alex Bewley
Date: Fri, 29 Sep 1989 23:04
Date: Fri, 29 Sep 1989 23:04
65 lines
2325 bytes
2325 bytes
I was struck with an urge to think just the other day and came up with the
following observation. I was flipping through some Ada books in the library
('cause they outnumber Modula-2 books about 20 to 1) and Ada seems to have a
feature where you can define an operator for non-standard types. For example
suppose you want to add two complex numbers. You have to:
Result := AddComplex(A, B);
Which detracts from structure readability (say what?). Well, what I mean
is that, for example, when adding CARDINALs you just have:
Result := A + B;
Which (algebraically) reads exactly as you mean it. In Ada you can
define the '+' operator to be able to handle the Complex number type.
Would such a feature be warranted in Modula-2?
Here is some theoretical code:
(* necessary IMPORTs *)
TYPE
Complex; (* abstract type *)
OPERATORTYPE
"+" : AddComplex(Complex, Complex) : Complex; (* procedures called *)
"-" : SubComplex(Complex, Complex) : Complex; (* when operators used *)
":=" : DefineComplex(REAL, REAL) : Complex;
VAR
Result : Complex;
A, B : Complex;
BEGIN
A := 2.0, 2.0;
B := 4.0, 4.0;
Result := A + B;
END;
The compiler or translator could substitute the necessary procedure
and make sure that the correct types are being used.
Thus, the compilable code would look like:
BEGIN
A := DefineComplex(2.0, 2.0);
B := DefineComplex(4.0, 4.0);
Result := AddComplex(A, B);
END;
This kind of operator definability could be used to simplify reading
of bit shifting operations. For example:
EquipList := (BIOSResult SHL 5) XOR OtherBIOSResult;
Rather than:
EquipList := Shl(BIOSResult, 5);
EquipList := Xor(EquipList, OtherBIOSResult);
Something to think on...
Alex
Just this guy...
Technical Details
Message-ID:
<INFO-M2%89093000360807@UCF1VM>Path:
arc1-ca.pugleaf.net!utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!UOGUELPH.BITNET!BOTCHAIRShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!UOGUELPH.BITNET!BOTCHAIR From: BOTCHAIR@UOGUELPH.BITNET (Alex Bewley) Newsgroups: comp.lang.modula2 Subject: Defining Operators Message-ID: <INFO-M2%89093000360807@UCF1VM> Date: 29 Sep 89 23:04:26 GMT Sender: daemon@ucbvax.BERKELEY.EDU Reply-To: Modula2 List <INFO-M2%UCF1VM.BITNET@PSUVM.PSU.EDU> Organization: The Internet Lines: 65