### 4.24.1 Definition of a user defined type

Syntax:
  `newstruct(` name `,` string_expression `);`
  `newstruct(` name `,` name `,` string_expression `);`

Purpose:
  defines a new type with elements given by the last argument (string_expression). The name of the new type is the first argument (of type string) and must be longer than one character.
  The second name (of type string) is an already defined type which should be extended by the new type.
  The last argument (of type string) must be an comma separated list of a type followed by a name. If there are duplicate member names, the last one wins.
  (User defined) member names are restricted to alphanumeric characters and must start with a letter.

Operations:
  the only operations of user defined types are:
  assignment (between objects of the same or extended type)
  `typeof`
  `string` and printing
  operator `.` to access the elements

Example:

        newstruct("nt","int a,poly b,string c");
        nt A;
        nt B;
        A.a=3;
        A.c=string(A.a);
        B=A;
        newstruct("t2","nt","string c");
        t2 C; C.c="t2-c";
        A=C;
        typeof(A);
      ==> t2
        A;
      ==> c=t2-c
      ==> c=
      ==> b=<poly>
      ==> a=0
        // a motivating example ------------------------------------------
        newstruct("IDEAL","ideal I,proc prettyprint");
        newstruct("HOMOGENEOUS_IDEAL","IDEAL","intvec weights,proc prettyprint");
        proc IDEAL_pretty_print(IDEAL I)
        {
          "ideal generated by";
          I.I;
        }
        proc H_IDEAL_pretty_print(HOMOGENEOUS_IDEAL I)
        {
          "homogeneous ideal generated by";
          I.I;
          "with weights";
          I.weights;
        }
        proc p_print(IDEAL I) { I.prettyprint(I); }
        ring r;
        IDEAL I;
        I.I=ideal(x+y2,z);
        I.prettyprint=IDEAL_pretty_print;
        HOMOGENEOUS_IDEAL H;
        H.I=ideal(x,y,z);
        H.prettyprint=H_IDEAL_pretty_print;
        H.weights=intvec(1,1,1);
        p_print(I);
      ==> ideal generated by
      ==> _[1]=y2+x
      ==> _[2]=z
        p_print(H);
      ==> homogeneous ideal generated by
      ==> _[1]=x
      ==> _[2]=y
      ==> _[3]=z
      ==> with weights
      ==> 1,1,1

User manual for Singular version 4.4.1, 2025, generated by texi2html.