[Aldor-l] [fricas-devel] Re: "has" in the interpreter

Ralf Hemmecke ralf at hemmecke.de
Wed Nov 19 15:30:34 EST 2008


> 'is' however is something else. It invites the programmer to deal with
> specific cases rather than the most general case.

I'd would discourage 'is' for such a case.

In some experimental code, I had myself some need of 'is' in Aldor. 
Since there is no 'is' I used some workaround.

Here I don't need it for selecting special cases, but rather to check 
whether the domains are identical so that I could safely 'pretend' that 
one value 'y' of type Y is also of type X.

Instead of the line
                 if List X has ListType Y then {
you should read
                 if X is Y then {
.

I don't say that I am completely happy with the code at all, since 
'Object' as presented in the AUG is not really one of my favourite 
types. (Same for Any, but this is a another story.)

Ralf

---
define ObjectLabelType: Category == with {
         LabelType;
	label: (Lab: LabelType, Lab) -> %;
	explode: % -> (Lab: LabelType, Lab);
}
Label: ObjectLabelType == add {
         macro LT == LabelType;
	Rep == Record(LabDom: LabelType, label: LabDom);
         import from Rep;
	label(Lab: LabelType, l: Lab): % == per [Lab, l];
	explode(x: %): (Lab: LabelType, Lab) == explode rep x;
	equals?(X: LT, x: X)(Y: LT, y: Y): Boolean == {
                 -- We must check whether X is the same domain
                 -- as Y. We can do that by asking whether
                 if List X has ListType Y then {
                         (x = y pretend X)
                 } else {
                         false;
                 }
	}
	(x: %) = (y: %): Boolean == equals?(explode x)(explode y);
         ...
}



More information about the Aldor-l mailing list