It's might be worth noting that
|. onsub 2 mat
4 14 10 14 7 13
6 9 15 10 18 1
3 5 9 9 7 16
8 12 11 18 16 18
5 6 1 1 9 10
can be replaced with
onsb=: 1 :0
{., ([ }. {."1) ,. [: u [ }."1 }.
)
2 |. onsb mat
4 14 10 14 7 13
6 9 15 10 18 1
3 5 9 9 7 16
8 12 11 18 16 18
5 6 1 1 9 10
And there's tricks you can use even nowadays to rephrase an explicit
one line adverb like this into a tacit adverb. though in my opinion
they do not help its readability -- that said, this might be overcome
through the use of meaningful names for the components. You can do
that even here, though:
toprows=: {.
leftrows=: [ }. {."1
bodyrows=: [ }."1 }.
onsb=: 1 :0
toprows, leftrows,. [: u bodyrows
)
But... that said, there can be a problem in production code with this
approach, which has to do with stepping on names. If you go fully
tacit, you can remove the intermediate verb names from the result,
which lets you assemble code which avoids verb name collision issues.
(It also can make it a representation of the code harder to read,
which might be seen as an advantage in intellectual property contexts.
However, there aren't a lot of J programmers, and in international
contexts ... there have been ... bigger problems.)
But the big win, here, is that you can take the implementation of
onsb, and turn it into a conjunction (introducing a v) and thus
perform an arbitrary operation on more than the 'bodyrows'.
I hope this helps,
--
Raul
On Mon, Jun 1, 2020 at 10:30 PM Hauke Rehr <[email protected]> wrote:
>
> I usually do tacit programming with J,
> but what I mean by this is I don’t use x or y
> that is I can write tacit _verbs_ only.
> I know one can be tacit on modifier level etc
> but I didn’t ever learn how.
>
> 1. is there any good place to start learning?
> if not, would anyone mind putting together
> some material on this?
> 2. here is an example of something that in terms
> of data manipulation is not very J-ish
> but let’s assume I need to do it this way
> for some reason:
> onsub =: 2 : 'n&{. , n&}.@:(n&{."1) ,. u@:(n&}."1)@(n&}.)'
> (
> first I wrote it as an adverb without all the 'n&' parts,
> then I generalized by adding them – it’s repetitive
> but it does what I want it to do
> )
> usage is like
> |. onsub 2 mat =: ? 5 6 $ 20
> reversing (mirror) the 3 by 4 lower right submatrix
>
> (a) how to write this without reference to u or n?
> (b) what if I wanted to use it like this:
> (|.;#) onsub 2 mat
> with the result like everything happening in onsub
> after application of u will work on its >@{.
> and after everything is done its }. will be ;ed.
>
> btw feel free to alter this thread’s subject, I just don’t know
> what direction this will take so I picked the broad 'tacit' key
>
>
> --
> ----------------------
> mail written using NEO
> neo-layout.org
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm