Some programming languages (unix shell, perl, php) provide a $
substitution mechanism where a literal string may contain embedded
variable references which get replaced with the value of the variable.
This can be handy.
Here's an example implementation of this kind of mechanism in J:
IDCHARS=: '$ABCDEFGHIJKLMNOPQRSTUVWXYZ'
dolsub1=: 1 :0
loc=. boxopen m
n=. y (e. i. 0:) IDCHARS
if. n < 3 do. <y return. end.
nm=. }.n{. y
if. 0 ~: nc__loc <nm do. <y return. end.
<(,":do__loc nm),n}.y
)
dolsub=: 1 :0
2 }. [: ; [: m dolsub1;.1 '$ ', ]
)
Example, given:
sample=:0 :0
This is some sample text
Here's an example substitution:
($IDCHARS)
)
dolsub can replace $IDCHARS with the value defined for IDXCHARS:
'base' dolsub sample
This is some sample text
Here's an example substitution:
($ABCDEFGHIJKLMNOPQRSTUVWXYZ)
Notes:
dolsub is an adverb. The locale used to resolve names is its left
argument. If you do not want the z locale to be referenced, make sure
it's not a part of the locale's path.
In this implementation, I only allow names which are ALL CAPS and
which are at least 2 characters long. Extending this to support lower
case alphanumerics is trivial.
In this implementation, I only interpolate names with noun definitions.
I do not attempt to provide table formatting for tabular values,
because that gets into ambiguities I do not care about. I'm ravelling
so I can ignore leading 1 dimensions.
The expression y (e. i. 0:) IDCHARS is supported by special code (but
that's only a minor speed improvement for this kind of routine).
FYI,
--
Raul
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm