You already understood that some kinds of brackets
don’t come in balanced pairs. But parentheses () nearly
always do, the exceptions being inside of strings,
obviously, and closing ) on a line of its own
(which doesn’t occur here, so I won’t explain that).
(oh, and {{…}} introduced another possibility)

So there is no (, token nor is {~3#.\0,],0:)@{:)^:y
comprehensible on its own.

Use dissect in order to find out about the structure
of this expression. (I hardly ever use dissect but Henry
recommends using it for figuring out this kind of things.)


> - I could not find the meaning of certain tokens using the dictionary. For
> instance, what is (,? What is \0?

\0 doesn’t have a meaning of its own either
\ is an adverb and the following 0 is just that: zero.
you asked for tokens – in J, you get them by

   ;: '(, ((72#:~8#2){~3#.\0,],0:)@{:)^:y ,: 1 y} (>:+:y) $ 0 '
┌─┬─┬─┬─┬──┬──┬─┬─┬─┬─┬─┬─┬─┬─┬──┬─┬─┬─┬─┬─┬──┬─┬─┬──┬─┬──┬─┬──┬─┬─┬─┬─┬──┬──┬─┬─┬─┬─┐
│(│,│(│(│72│#:│~│8│#│2│)│{│~│3│#.│\│0│,│]│,│0:│)│@│{:│)│^:│y│,:│1│y│}│(│>:│+:│y│)│$│0│
└─┴─┴─┴─┴──┴──┴─┴─┴─┴─┴─┴─┴─┴─┴──┴─┴─┴─┴─┴─┴──┴─┴─┴──┴─┴──┴─┴──┴─┴─┴─┴─┴──┴──┴─┴─┴─┴─┘

all of these you either already know (numeric constants, parens)
or you can look up in the dictionary/vocabulary
the 0: is not a constant, but a constant function: it always returns 0

maybe you want to try understanding on your own
so I won’t be explaining more (yet)
you already understood some parts – go on that way

(or ask for a full explanation once you’re too frustrated trying
to figure it out for yourself)

there are other ways to explore a sentence, as well
(try suffixes; plug in different values for each occurrence of y; …)



Am 01.02.22 um 19:31 schrieb Andrew P:
I have found in a forum the following J code that generates a Sierpinski
triangle, and am trying to understand how it works.

sierpinski =: {{ (, ((72#:~8#2){~3#.\0,],0:)@{:)^:y ,: 1 y} (>:+:y) $ 0 }}

' #'{~ sierpinski 15

#

# #

# #

# # # #

# #

# # # #

# # # #

# # # # # # # #

# #

# # # #

# # # #

# # # # # # # #

# # # #

# # # # # # # #

# # # # # # # #

# # # # # # # # # # # # # # # #


I am a J novice and what I have gathered so far is that

- {{ }} is an inline definition of a function. In this case a monadic one
with argument y.

- Calling sierpinski 15 yields a matrix with 0s and 1s making the shape of
a Sierpinski triangle.

- ' #'{~ uses the 0s and 1s in that matrix as indexes for the ' #' array,
thus converting zeros to spaces and 1s to #s.

- (>:+:y) is 2*y+1 (+: being 2* and >: being +1).

- (72#:~8#2) is a weird way of generating the first 8 digits of 72 in base
2. The digits are generated using the dyadic #: verb, with the arguments
switching sides with the ~ adverb.


The rest of the code is incomprehensible to me. In particular:

- I could not find the meaning of certain tokens using the dictionary. For
instance, what is (,? What is \0?

- This part of the program is so densely packed that I cannot even break it
into pieces: {~3#.\0,],0:)@{:)^:y


I would be very grateful if someone could help me understand this code.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

--
----------------------
mail written using NEO
neo-layout.org
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to