Thanks Gaby.  I like that you're tightening up spad behaviour.

Arthur

On 12/18/2010 05:24 PM, Gabriel Dos Reis wrote:
> Arthur Ralfs<art...@mathbrane.ca>  writes:
>
> | Hi Gaby, Martin,
> |
> | I've uncovered another problem in getting Martin's framework to work
> | under OpenAxiom.  Here's some stripped down code illustrating the problem:
>
>
> Hi Arthur,
>
> The problem is simply an error in the `add' specification in SCartesian.
>
> The `add' part in a capsule can only designate a domain on its left.
> At least, that is the behaviour documented by the AXIOM book
> (see section 13.8 titled `Add Domain')  The OpenAxiom runtime relies on
> that in the way it interprets domain slots at runtime -- slot number 5
> is usually where OpenAxiom puts add-domain, as implied by the design of
> the original AXIOM.
>
> More specifically:
>
> | **begin code*******************************************************
> |
> | )abbrev domain SCRT SCartesian
> |
> | SCartesian(n) : Exports == Implementation where
> |
> |    n: PositiveInteger
> |    PI   ==>  PositiveInteger
> |    DF   ==>  DoubleFloat
> |
> |    Exports ==  SetCategory with
> |      sipnt: (a:Integer,b:Integer) ->  %
> |      spnt: (a:DF,b:DF) ->  %
> |
> |    Implementation == Type add
>                         ^^^^^^^^
>
> that is an error.  That line should simply be
>
>      Implementation == add
>
> Type is not a domain, it is a category; so it should not be used there.
> (It can be used in the exports though, see below.)
>
> |      sipnt(a:Integer,b:Integer):% == spnt(a::DoubleFloat,b::DoubleFloat)
> |
> |
> |      Rep := PrimitiveArray DF
>
> More generally, if you specify an `add domain', then should not specify
> a Rep.  (OpenAxiom will issue a warning to that effect.)   The reason is
> that the `add domain' also implicitly provides a Rep -- that was
> intended in the original AXIOM design but never fully implemented,
> OpenAxiom fully implements that semantics (with warning.)
>
> So, in this case, if you just remove the `Type' in the definition of
> Implementation, you should be good -- and that should work with all
> AXIOM flavours.
>
> As a general remark, I would suggest to avoid `add domain' unless, you
> know you are truly doing an *extension*, as opposed to `inheritance'
> as understood in the object oriented world.  In all AXIOM variants, a
> domain extension *adds* to the base domain, it does not necessarily
> override the base domain (especially, when the base domain uses
> defaults.)
>
> I think OpenAxiom should not silently let the code pass through at
> compile time, only to error at runtime.  I'll try to see how I can fix
> that without introducing to any pertubation on assignment of slot numbers.
>
> |
> |      spnt(a:DF,b:DF):% ==
> |        pt := new(n+1,0$DF)$Rep
> |        pt.0 := a
> |        pt.1 := b
> |        pt.n := 1...@df
> |        pt
> |
> | )abbrev domain SCENE Scene
> |
> | Scene(): Exports == Implementation where
> |   PT ==>  SCartesian(2)
> |   I ==>  Integer
> |   NNI ==>  NonNegativeInteger
> |   LINES ==>  List List PT
> |   BOUNDS ==>  Record(mins:PT,maxs:PT)
> |   PARAMS ==>  Union(points:LINES,boundbox:BOUNDS)
> |
> |   Exports == with
>
> Stylistically, I prefer to write
>
>      Exports == Type with
>
> when writing package exports.
>
> [...]
>
> | Using a Fricas build from trunk 2010-12-07  and an OpenAxiom build from
> | trunk 2010-12-16 these domains compile under both.  However whereas
> | under Fricas I get
> |
> | (1) ->  createSceneRoot()$Scene
> |
> |     (1)  "scene root #ch=0"
> |                                                                    Type:
> | Scene
> |
> |
> | under OpenAxiom I get
> |
> | (35) ->  createSceneRoot()$Scene
> |
> |>>  System error:
> |     The value 5 is not of type LIST.
> |
> |
> | I can get rid of the error under OpenAxiom by either eliminating the
> | SetCategory assertion in the SCartesian domain or by changing the
> | commented out lines for the corresponding ones.
> |
> | Any ideas?
>
> With the correction as indicated at the beginning of this message, I get
> the same result as FriCAS.
>
> -- Gaby
>


------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
open-axiom-devel mailing list
open-axiom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open-axiom-devel

Reply via email to