Pepe's version is classy. I avoided :: because I wasn't sure what would happen if there was an empty character-string on the left.

I included 8 because sometimes you get a float where you wouldn't expect one:

   3!:0 (2^3)
8

Works fine for {

   (2^3) { i. 9
8


I now think it would be better to test for character-string; and handling the empty-list case and rewriting to use ^: and allow non-strings on the right gives

   applyTemplate =: ;@:(":&.>)@({~^:(2 ~: 3!:0@>@])"_ 0~  ,)

The original / at the end was unnecessary.

Henry Rich


On 1/7/2016 9:49 AM, Joe Bogner wrote:
Thanks Henry - that's covers it nicely and would translate into a
description of the spec (had I wrote it)

Reduce X, a list of boxes, to a single string by looking at the
contents of each box. If the contents (or type) of the value in the
box is not a number, append the contents to the string being
constructed. If the value is a number, use the number to index into Y,
a list of boxes, and append that content to the string.

Stating it this way, it becomes apparent it's a general form of
reduction with a parameter that needs to be available at each step of
the reduction.

I'm curious why you included 8 (JFL) in the list of types. It would
meet the criteria of a number in the spec, but might of course doesn't
work for { ... Either way it's fine, just interested in your thinking

There's a small issue if Y only has one value

('Dear ';0;' - Hello!') applyTemplate (<'abc')
|length error: applyTemplate

But that can be fixed by enlisting it:

('Dear ';0;' - Hello!') applyTemplate (,<'abc')
Dear abc - Hello!


applyTemplate =: ;@:([`{@.(1 4 8 e.~ 3!:0@>@[)"0 _/)

_/ is particularly interesting and threw me off. I then realized it's
just controlling the rank of the verb, u, for / . It specifies the
rank as 0 _ so it's saying apply the verb to each cell of X and use
the entirety of Y... Makes sense. To confirm, I plugged 1 in for _ and
it was fine. Dissect helped me figure this out

('Dear ';0;' - Hello!') ;@:([`{@.(1 4 8 e.~ 3!:0@>@[)"0 1 /) (,<'abc')
Dear abc - Hello!





I also like the clarity of the statement more so than using adverse ::


Pascal - Thanks for the reply as well. Yours acts more like a printf
with the token in the string instead of outside in a box. I opted for
the boxed view so I wouldn't have to worry about parsing and picking a
good token delimiter. The binary code of :::: is an interesting
approach though.

I think the concept of applyTemplate is useful because joining strings
can be tedious when J evaluates them as a train (] , ' foo')  -- no
noun allowed in the right tine! and that can get trippy with longer
strings:

('Dear', ] , ' - Hello!') 'abc'  -- nope!

('Dear ', ] @ ,&' - Hello!') 'abc' -- typically a trial and error and
not as easily red

    ('Dear ';0;' - Hello!') applyTemplate ('abc';'')
Dear abc - Hello!

On Thu, Jan 7, 2016 at 7:43 AM, Henry Rich <[email protected]> wrote:
I finally understand the spec.

applyTemplate =: ;@:([`{@.(1 4 8 e.~ 3!:0@>@[)"0 _/)

Henry Rich


On 1/6/2016 9:37 PM, Joe Bogner wrote:
I often find myself joining strings with x/y

The most recent example was:
('http://real-chart.finance.yahoo.com/table.csv?s=' ,
]@,&'&a=10&b=2&c=1993&d=00&e=6&f=2016&g=d&ignore=.csv') 'TICKER'

I think it would be handy to have a simple verb that can take a box of
strings / indices and merge it with a box of inputs

Something like:

('hello ';0;0;0) applyTemplate ('a';'b')

Would result in

hello aaa

('hello ';0;' hello';1) applyTemplate ('a';'b')

would be:

hello a hello b

I struggled with this for about 25 minutes to make it tacit and gave
up. Any takers?

(I thought about using printf but figured it was too heavy)


applyTemplate =: 4 : 0
str=.''
for_p. x do.
str=.str,(( y {::~ ]) :: ] ) (>p)
end.
)

('hello ';0;' hello ';1) applyTemplate ('a';'b')
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to