Pepe wrote:
>  The problem is, as you now know, exceeding the 100 KB limit.  So I
>  followed Chris’ advice and trimmed the old messages.
> 
>  These are the answers to your questions,

Below is the message Pepe is responding to, for context (and so that it
shows up in the Forum archives, which I rely on).

Pepe wrote (earlier):
>  Dan, in the meantime you might find the following somewhat enticing,
>
>     u0`u1`u2`u3 At=. (at~&:train)/ o |. f.adv
>  u0@:u1@:u2@:u3
>
>  or even better (removing the middle man),
> 
>     eval=. train o ({: ; (an o }:)) NB. Verb form
>  ...
>     [: u0 u1 u2 u3 At
>  u0@:u1@:u2@:u3

Awesome! I've wanted something like this (no-middle-man) since 2010 [1],
and the J community has been wanting (train-to-pipeline) since at least
2003 [2]. I'm very glad to have these tools and they're going straight in
my toolbox. Thank you. 

I think the only last thing we need is some nicer notation for the pattern.
In [2], Paul Chapman proposed defining (: ): for this purpose, and that
idea has  been raised a few times since (mostly by me :). But, rather than
change the DoJ so drastically, with the advent of Unicode we should be
able to provide, in userspace, our own custom symbols to denote a verb
pipeline (perhaps guillemets e.g., «u1 u2 u3 u4» as I suggested in [1],
but really, anything from [4] could work). Of course, that would require
us to add support for Unicode identifiers in the language, so I'm glad to
see active discussion of that idea in recent threads (it would be more
satisfying and less risky to change the language to support Unicode than
introduce new punctuation like (:): or (.). etc.)

[These are the questions Pepe was responding to, below]
 
I haven't had a chance to try out your examples below yet, but did you
manage to work around the rightmost-hook limitations that have plagued all
tools in this vein to date [3]? What does your utility produce for (u1 u2
(u3 u4)) ? 

Does it preserve the embedded hook at the right edge, or glue its
components together with the top-level verbs? Is that consistent with its
treatment of other nested trains (e.g. a hook embedded somewhere off the
right edge, or nested forks, etc)? What does it do with doubly-nested
trains, and deeper?

If it doesn't produce u1@:u2@:(u3 u4) for u1 u2 (u3 u4), I have a vague
sense that this problem arose in another context quite recently, and
someone posted a solution. Maybe Raul and/ or Pascal?
 
-Dan
  
[1] Adverb for creating verb pipelines from trains, 
    which I couldn't get working the way I wanted:

    http://www.jsoftware.com/pipermail/programming/2010-June/019756.html

[2] Paul Chapman on using '):' to enclose trains and glue the component 
    verbs together using @:, in order to reduce visual noise in J 
    expressions (because pipelines are a common pattern and having lots
    of @: clutters them up & buries the logic):

    http://www.jsoftware.com/pipermail/general/2003-August/015037.html
 
[3] Paul's script to produce pipelines from trains:
    http://www.jsoftware.com/pipermail/general/2003-August/015037.html

[4] Various ways of denoting quotation, e.g.?u1 u2 u3 u4:
   
http://en.m.wikipedia.org/wiki/International_variation_in_quotation_marks 

[Chronologically, the message below appeared before this one, but
sequentially it comes after]

----- Original Message ---------------

Subject: Re: [Jprogramming] Tacit recursion without $:
   From: Jose Mario Quintana <jose.mario.quint...@gmail.com>
   Date: Mon, 3 Mar 2014 12:13:35 -0500
     To: Programming forum <programm...@jsoftware.com>

Dan,

The problem is, as you now know,  exceeding the 100 KB limit.  So I
followed Chris’ advice and trimmed the old messages.

These are the answers to your questions,

   [: u0 u1 At
u0@:u1

I should point out that neither there is a train nor a need for
parentheses. There is an issue when there is a single verb in the strand
(because a verb associated to / is not executed when the argument is a
single item),

   [: u0 At
+--+
¦u0¦
+--+

It can be fixed as follows but I might not be worth it,
   At=. (train ^: (L.~: 0:)) o ((at~&:train)/) o |. f. sv
   [: u0 At
|value error: u0
   [: * At
*
It also produces an error for an empty strand but this behavior seems right
to me,
[: At
|domain error: At
| @:a:

Regarding  (u1 (u2 u3)) , (u1 u2 (u3 u4)),


   [: u1 (u2 u3) At
u1@:(u2 u3)

   [: u1 u2 (u3 u4) At
u1@:u2@:(u3 u4)

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

Reply via email to