up previous next
shape

extended list of types involved in an expression

Syntax
shape(E: LIST): LIST (of TYPE)
shape(E: RECORD): RECORD (of TYPE)
shape(E:OTHER): TYPE

where OTHER stands for a type which is not LIST, MAT, or RECORD.

Description
This function returns the extended list of types involved in the expression E as outlined below:
type(E) = LIST
  In this case, Shape(E) is the list whose i-th component is the type
  of  the i-th component of E.

type(E) = MAT
  In this case, Shape(E) is a matrix with (i,j)-th entry equal to the
  type of the (i,j)-th entry of E.

type(E) = RECORD
  In this case, Shape(E) is a record whose fields are the types of the
  fields of E.
Otherwise, Shape(E) is the type of E.

Example
/**/  use R ::= QQ[x];
/**/  L := [1,[1,"a"], x^2-x];
/**/  shape(L);
[INT, [INT, STRING], POLY]

/**/  R := record[name := "test", contents := L];
/**/  shape(R);
record[contents := [INT, [INT, STRING], POLY], name := STRING]

/**/  It.name;
STRING
There are undocumented functions, IsSubShape and IsSubShapeOfSome , for determining if the shape of a CoCoA expression is a subshape of another. To see the code for these functions, enter
  Describe Function("$misc.IsSubShape");
  Describe Function("$misc.IsSubShapeOfSome");