1. An elegant solution?

OK, some people want structures or records or whatever, but implementing =
them would break code.  Let's try this on for size, taking inspiration =
from routine_id.  Every sequence, whether top level or sublevel, has at =
least one attribute flag for the length of the sequence.  Let's add =
another flag called "locked".  This flag is boolean, so it won't really =
use any significant memory.  Whenever a sequence is created, locked =3D =
false.  So far, everything is backwards compatible.  Now, we add two new =
procedures and two functions to the internal library.  For example:

sequence point3D


This sets the locked attribute to true and initializes the three =
positions to garbage (or 0).  Now, in append, prepend, &, and left-value =
of point3D, the change fails, generating an error.  If you set an atom =
as "Hello", you get an error, so this would appear as the same.  So,

point3D =3D {24,44,49} -- this is OK
point3D =3D {24,44,49,40} -- checks if sequence - OK; check if locked - =
yes; check locked length - 3;
-- check if assignment is the right length - NO, so error.  If yes, then =
check if each element is the right
-- type.  If no, then type-check error.
point3D =3D {24,44} -- no good, same as above.
point3D[2] =3D 44 -- this is OK
point3D[3] =3D 44.5 -- generates a type-check failure after checking for =
locked status.
point3D =3D append(point3D,...)=20
point3D =3D prepend(point3D,...)
point3D =3D point3D & ...
-- All these generate errors for trying to change the length of a locked =
sequence.

To unlock the sequence and return it to normal operations,
unlock_sequence(point3D)

To check its locked status,
if is_locked(point3D) then
...
end if

And to check the validity of elements of a sequence of locked sequences, =
we would have to use
if equals_sequence(point3Dgrid[1],{"integer","integer","integer"}) then
... -- returns 1 if true, 0 if false
end if

Would this be an acceptable / elegant solution?  It would not define any =
new types, shouldn't break existing code, and would allow a Euphorized =
structure syntax.  Ideas?

Michael J. Sabal
mjs at osa.att.ne.jp
http://home.att.ne.jp/gold/mjs/index.html

new topic     » topic index » view message » categorize

2. Re: An elegant solution?

Although I'm not very intelligent, I understood everything.
So I think it is the elegant solution.
You could also write:
global function structure(sequence s)
        return is_locked(s)
end function

.... if structure(foo) then
        puts(1,"you're right")
     endif

but there's no "." or "::" .
(on my french keyboard it's faster to type 2 ":" than "shift-." smile
 ----------
From: Michael Sabal
To: EUPHORIA at LISTSERV.MUOHIO.EDU
Subject: An elegant solution?
Date: Tuesday 2 February 1999 23:49

<deleted...>

To check its locked status,
if is_locked(point3D) then
...
end if

new topic     » goto parent     » topic index » view message » categorize

3. An elegant solution?

My e-mailer has had some trouble lately, and nobody who's still talking =
about structures has addressed this suggestion, so I'm sending it again.

>OK, some people want structures or records or whatever, but =
implementing them would break code.  Let's try this on for size, taking =
inspiration from routine_id.  Every sequence, whether top level or =
sublevel, has at least one attribute flag for the length of the =
sequence.  Let's add another flag called "locked".  This flag is =
boolean, so it won't really use any significant memory.  Whenever a =
sequence is created, locked =3D false.  So far, everything is backwards =
compatible.  Now, we add two new procedures and two functions to the =
internal library.  For example:

sequence point3D


This sets the locked attribute to true and initializes the three =
positions to garbage (or 0).  Now, in append, prepend, &, and left-value =
of point3D, the change fails, generating an error.  If you set an atom =
as "Hello", you get an error, so this would appear as the same.  So,

point3D =3D {24,44,49} -- this is OK
point3D =3D {24,44,49,40} -- checks if sequence - OK; check if locked - =
yes; check locked length - 3;
-- check if assignment is the right length - NO, so error.  If yes, then =
check if each element is the right
-- type.  If no, then type-check error.
point3D =3D {24,44} -- no good, same as above.
point3D[2] =3D 44 -- this is OK
point3D[3] =3D 44.5 -- generates a type-check failure after checking for =
locked status.
point3D =3D append(point3D,...)=20
point3D =3D prepend(point3D,...)
point3D =3D point3D & ...
-- All these generate errors for trying to change the length of a locked =
sequence.

To unlock the sequence and return it to normal operations,
unlock_sequence(point3D)

To check its locked status,
if is_locked(point3D) then
...
end if

And to check the validity of elements of a sequence of locked sequences, =
we would have to use
if equals_sequence(point3Dgrid[1],{"integer","integer","integer"}) then
... -- returns 1 if true, 0 if false
end if

Would this be an acceptable / elegant solution?  It would not define any =
new types, shouldn't break existing code, and would allow a Euphorized =
structure syntax.  Ideas?

Michael J. Sabal
mjs at osa.att.ne.jp
http://home.att.ne.jp/gold/mjs/index.html

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu