I have added to

http://code.jsoftware.com/wiki/Vocabulary/cor

especially notes 1, 2, and 12 and new example 27 at the end. See if this would have helped.

Henry Rich

On 2/12/2016 2:03 PM, Matthew Baulch wrote:
Ok. That explains things well.  So the the line(s) containing : behave just
as if : is an everyday conjunction. It's the lines AFTER : that are treated
specially.

I suppose that's quite a clear design. I'll re-read the documentation. Like
you say, once I know what's going on, these subtle points are more likely
to stand out.

". does indeed have unlimited potential—over the domain of character arrays
anyway. I'm trying to wrap this construction in a verb so I can obtain
these multi-line definitions without explicitly calling ". . Just for
feelings of purity. It doesn't seem like this can be accomplished tacitly.
I'm starting to think that 0:0 has to appear in each definition, and so
defining such a verb may not be possible. Oh well.

Thanks. : makes sense now.
On 12 Feb 2016 2:11 pm, "Henry Rich" <[email protected]> wrote:

Forgive me if I'm wrong, but I don't see a discussion of 'expressions to
the
right of zero' (such as '-.LF' in '0 : 0 -. LF')
in either of your links.
No.  But that isn't surprising when you understand what's going on.

0 : 0 creates a noun.

Because conjunctions are executed before verbs,

0 : 0 -. LF

is the same as

(0 : 0) -. LF

(0 : 0) creates a noun that can be used just as any other noun is used.
You can add to it, subtract from it, execute it...  The (-. LF) has nothing
to do with the execution of (:).  What I'm saying is, if you are OK with
something like

".;._2 (0 : 0)

[which feeds the result of (0 : 0) into a verb], you should ipso facto be
OK with

(0 : 0) -. LF

which also feeds that result into a verb, just from the left this time.

The (:) in (0 : 0) is executed WHEN (:) IS EXECUTED, i. e. at the
appropriate time during the parse [see NuVoc for explanations]. After (:)
has read its fill, execution of the sentence continues. So, you can have

    (0 : 0) ,&(".;._2) (0 : 0)

1 2 3

)

10 20 30

40 50 60

70 80 90

)

10 20 30

40 50 60

70 80 90

1 2 3


Two (0 : 0) in one sentence [the parentheses are not required]! and
executed right-to-left.



(".) has unlimited potential, but often is put to mundane use. When I was
starting with J I felt a frisson of daring when I used it, but now it's
just another verb to me.


Henry Rich




I'd welcome any correction.

Cheers.
It's pretty well explained at

http://code.jsoftware.com/wiki/Vocabulary/NounExplicitDefinition

The question is, How would you know to read that?  Suggestions welcomed.

When you say "expression following the 0", I'm not sure which 0 you mean.

: is the all-purpose entity creator; the left 0 says 'create a noun', and
the right
0 says 'make that noun from the upcoming lines of input'.

Full details are spelled out in several pages starting at
http://code.jsoftware.com/wiki/Vocabulary/cor

Henry Rich


On 2/11/2016 12:55 AM, Matthew Baulch wrote:

Thanks everyone. This (let's say) creative use of 0 : 0 makes sense to me
now. I wonder if it's an accidental consequence of the implementation
that
allows an expression following the 0, or whether it's a deliberate design
decision. Either way, it makes sense to have it documented. Can't see it
in
NuVoc or the Dictionary. Of course, I may have overlooked it.

Honestly, to obtain something simple like multi-line noun definitions, ".
does seem like quite a heavy-handed tool. It does work however, so I
probably shouldn't grumble.

Cheers.

On Wed, Feb 10, 2016 at 10:29 PM, Matthew Baulch <[email protected]>
wrote:

Looking at this more closely now. I'm a bit puzzled about the use of -.

here. Obviously this is used here in dyadic form. In x -. LF the LF
characters are, of course, removed from x. What is the x here? I have
seen
that it works--not doubting that. Just trying to work out how. Sorry.
There's probably something obvious I've missed.

On Wed, Feb 10, 2016 at 12:52 AM, Raul Miller <[email protected]>
wrote:

If you do not have good names for partial calculations, that might be

a sign that you need to think a bit more about the abstractions you
are using. It can be difficult for other people to read if you don't
make sufficient effort to label your abstractions.

Also, I would note that your 'c0' is not a combinator, as you are not
using its dyadic definition. So you might want to use a different name
for that one. Perhaps:

v0=:c0

That said, if you really want to execute really long lines, you can do
that using ". 0 :0-.LF and indented text. (You need the indentation
because line feeds will not separate words here.)

For example:

myStruct=: ". 0 :0-.LF
     v0 p0 c1 p1 c2 p2 c3 p3 c4 p4 c5 p5 c6 p6 c7 p7 c8 p8 c9 p9
     c10 p10 c11 p11 c12 p12 c13 p13 c14 p14 c15 p15 c16 p16 c17
     p17 c18 p18 c19 p19 c20 p20 c21 p21 c22 p22 c23 p23 c24 p24
     c25 p25 c26 p26 c27 p27 c28 p28 c29 p29 c30 p30
)

I hope this helps,

--
Raul

On Tue, Feb 9, 2016 at 4:59 AM, Matthew Baulch <[email protected]>
wrote:

Suppose I wish to construct a complex, non-regular deeply nested
structure:
to model some inherently non-linear system. A natural approach (for me,
anyhow) is to construct a library of combinators, or a domain specific
language, with which to specify the (boxed) structure.

J rises easily to the task, and before long I'm looking at long
function
trains of the form

myStruct =: c0 p0 c1 p1 c2 p2 ... cN pN

where the ci are (combinator) verbs, and the pj are (parameter) nouns.
Nice. Easy.

Only trouble is, N may be large and J prefers such statements to sit
on

a
single line. Correct? I can split my definition:
msPartA =. .....
msPartB =. .....
.....
msPartX =. .....
myStruct =: msPartA msPartB .... msPartX

though this feels awkward. The most obvious issue is that the PartA,

...,
PartX are distracting; unless of course I can find a natural way of
splitting and naming them. Ideally, the parts should be as close to a
comfortable line width as possible. Again, awkward. If myStruct1 and
myStruct2 have the same partitioning scheme but myStruct2 (for

instance) is
much larger than myStruct1, there will be many sparsely, or many
overpopulated lines. Awkward too.

I love J. It handles complex regular data so elegantly. How can I
bring
similar elegance to irregular data? Can my combinators be rescued, or
should I use another approach?
----------------------------------------------------------------------
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
----------------------------------------------------------------------
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