[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [Axiom-developer] boot : valid type checker
From: |
Bill Page |
Subject: |
RE: [Axiom-developer] boot : valid type checker |
Date: |
Sat, 7 Apr 2007 02:07:09 -0400 |
On April 6, 2007 12:30 PM Gregory Vanuxem wrote:
>
> At the boot level I want to know if a given type is valid.
> By type I mean a category or a domain (parametrised if
> they must be). So for example I want to know that
> 'Matrix(Character)' and 'Fields' are invalid but not
> Matrix(Ring) and Matrix(Integer)
You implied that Matrix(Ring) is valid, but it is not. Perhaps
this was a typo?
The definition of Matrix is
Matrix(R:Ring)
I wonder if you mean something like: since both
Integer has Ring
Field has Ring
are true, why not both
Matrix(Integer)
Matrix(Field)
Field of course, is a category while Integer is a domain.
> There are several functions in the interpreter for that but
> they are 'interactive' functions (in the sense that they will
> throw an error if the type is not valid) or they do not accept
> all possible categories. There is, for example, the function
> 'isValidType' but it seems to only accept domains and simple
> categories.
Can you give an example of a valid category for which isValidType
does not return T?
isValidType seems to work for me (of course this is just the
interpreter but the equivalent must work in Boot):
(1) -> mytype1:=["Matrix"::Symbol::SEX, ["Integer"::Symbol::SEX]::SEX]::SEX
(1) (Matrix (Integer))
Type: SExpression
(2) -> mytype2:=["Matrix"::Symbol::SEX,
["Character"::Symbol::SEX]::SEX]::SEX
(2) (Matrix (Character))
Type: SExpression
(3) -> mytype3:=["FiniteSetAggregate"::Symbol::SEX,
["Integer"::Symbol::SEX]::SEX]::SEX
(3) (FiniteSetAggregate (Integer))
Type: SExpression
(4) -> isValidType(mytype1)$Lisp
(4) T
Type: SExpression
(5) -> isValidType(mytype2)$Lisp
(5) ()
Type: SExpression
(6) -> isValidType(mytype3)$Lisp
(6) T
Type: SExpression
> The nirvana would be a function that accepts things like
> Matrix(Join(Foo,Bar)) [1].
I do not understand what you mean by this.
>
> Issues related are visible in the interpreter, try to type
> Matrix(Field) and List(Field).
>
> Am I thinking wrong ?
>
I think your examples are a little confused. Something can not
be a Field without also being a Ring, right?
Integer has Ring
Matrix(Integer)
Fraction Integer has Field
Fraction Integer has Ring
Matrix(Fraction Integer)
> Or may be you have some ideas or you know some functions that
> do what I'm looking for ?
>
Maybe you could give another example?
Regards,
Bill Page.