Pepe wrote:
> This is a puzzle for adverbial tacit writing fans: Write a purist tacit
> adverb (sf1) such that, for example,
>
> (v0 v1 v2)sf1
> v0@[ v1 v2@]
>
> 3 4 (+: + -:)sf1 2 4
> 7 10
I’m sure your solution is more elegant, but I haven’t looked yet, so here’s my
attempt:
LMR =: (`'') ((<":noun)`) (((":noun) <@:; <^:2)`) (@.(0; 1 2)) (xform`)
(`:6) (`:6)
xform =: (left center right)`'' ('[' atop~ ])`(']' atop~
])`]@.((;:'left right') i. [)"0 L:1 ]
atop =: '@' <@; <@:,&boxopen
For example:
(v0 v1 v2) LMR
v0@[ v1 v2@]
3 4 (+: + -:)LMR 2 4
7 10
The approach is general in the sense that it simply converts the train into its
atomic representation, then manipulates that representation structurally, then
executes the manipulated atomic rep to produce the desired verb.
I have yet to find a satisfactory, general, and elegant way to express the
clause:
((<":noun)`) (((":noun) <@:; <^:2)`) (@.(0; 1 2))
Which is almost-but-not-quite repeated in all the code I’ve written along these
lines (e.g. in “anonymous evoke”, etc). It converts the atomic rep of (v0 v1
v2), which is:
<(":verb) ;< ;:'v0 v1 v2'
+--------------+
|+-+----------+|
||3|+--+--+--+||
|| ||v0|v1|v2|||
|| |+--+--+--+||
|+-+----------+|
+--------------+
to the atomic representation _of that atomic representation_, which is:
<(":noun) ;<(":verb) ;< ;:'v0 v1 v2'
+------------------+
|+-+--------------+|
||0|+-+----------+||
|| ||3|+--+--+--+|||
|| || ||v0|v1|v2||||
|| || |+--+--+--+|||
|| |+-+----------+||
|+-+--------------+|
+------------------+
Doing this is necessary so that we can then prepend the manipulating verb (in
this case, xform) to this atomic rep, then execute the resulting gerund (array
of 2 atomic reps: the verb and the box above), so that the verb acts on the
atomic rep of the train.
I thought I could do something along the lines of
(`'') ((<":noun)`) (xform`) (@.(0;1 2))
That is, just create an array of 3 boxes, then use the boxed-RHA version of @.
to nest the gerund appropriately, but unfortunately in this case, the input to
xform needs an extra layer of boxing, and (@.(0;1 ;<2)) etc didn’t work.
What I’d really like is a general adverb that
- Accepts a verb as input, deriving another adverb
- That adverb converts its own input, whether noun or verb, to its atomic
representation
- Then the derived adverb applies the original verb to the atomic rep it
just created, allowing it to produce a new atomic rep
That is, the verb input to this adverb would be an “atomic rep manipulator”;
having this adverb would make essentially reduce general tacit adverbial
programming in J to general tacit verb writing, which is a much better explored
field, and easier to do.
-Dan
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm