axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] Re: Aldor %% bindings


From: Ralf Hemmecke
Subject: [Axiom-developer] Re: Aldor %% bindings
Date: Wed, 15 Mar 2006 11:13:19 +0100
User-agent: Thunderbird 1.5 (X11/20051201)

On 03/14/2006 09:56 AM, Page, Bill wrote:
Ralf, and other Aldor experts;

Section "7.5 Subtypes" of the Aldor Users Guide says:

  Note that Aldor is constructed so that a domain is only a
  member of a named category if it explicitly inherits from
  the category -- not if it merely exports the same collection
  of (explicit) declarations\1.

Footnote \1 says:

  In the current implementation, each named category C
  implicitly exports a symbol named \%%" with type C (see
  Section 8.12), whose presence is tested for in checking
  category membership.

Note: 8.12 is a typo. It should say 8.11.

Section "8.11 With" says::

  A 'with' expression also defines a constant named "%%" for
  each category from which the 'with' expression inherits.
  The type of %% is the inherited category, and the value
  is the domain viewed as a member of that category...
  The %% bindings are generally most useful for checking
  conditions.

-------

Can anyone explain the usage of %% and give some examples
where it is used to "check conditions"?

For example "has" constructs, but I don't know if there is anything else.

#include "aldor"
define CatDummy: Category == PrimitiveType with {foo: () -> ()}

If you compile this with via "aldor -fasy aaa.as" then you get
something like that ...

((|Declare|
    |CatDummy|
    (|Define|
      (|Declare| (|Label| |CatDummy| ()) |Category|)
      (|With|
        |PrimitiveType|
        (|Declare|
          |foo|
          (|Apply| -> (|Comma|) (|Comma|))))))
    ((|catExports|
        (|Declare|
          =
          (|Apply| -> (|Comma| % %) |Boolean|))
        (|Declare|
          ~=
          (|Apply| -> (|Comma| % %) |Boolean|)
          ((|default| . 1))
        (|Declare|
          %%
          |PrimitiveType|)
        (|Declare|
          |foo|
          (|Apply| -> (|Comma|) (|Comma|)))
        (|Declare|
          %%
          |CatDummy|)))))

To make it shorter here, I have removed some
((|symeNameCode| . 243941740) (|symeTypeCode| . 83337439)) stuff.

What you see is that the Category CatDummy, not only exports %% for PrimitiveType but also %% for CatDummy.

As I understand this... apart from encoding the category hierarchy in that way it also could make the evaluation of "DOM has CatDummy" faster since the need only be a lookup whether there is some %% for CatDummy. No check for all the corresponding exported functions is necessary. (Am I wrong?)

What does it mean to be a "domain viewed as a member of
a specific category"?

I have only seen %% in places as above. So I have no idea what that could mean. Maybe it is used in conditional exports, I haven't checked that.

Apparently %% can have multiple bindings. About the
example in section 8.11 we read that:

  In the example, %% bindings are in scope for the
  following categories:
  BinaryAggregate, BooleanArithmeticType,
  BoundedFiniteLinearStructureType Boolean,
  BoundedFiniteDataStructureType Boolean,
  FiniteLinearStructureType Boolean, PrimitiveType,
  and so on.

How can I access the value (associated domain?) of a
particular binding?

Any hints about how to understand this would be greatly
appreciated.

Maybe Stephen Watt or Peter Broadbery could help.

Ralf




reply via email to

[Prev in Thread] Current Thread [Next in Thread]