> all kinds of side effects are best avoided – including assignments.
Localized assignment mitigates many of the problems with assignments.


On Wed, Jun 3, 2020 at 3:56 PM Hauke Rehr <[email protected]> wrote:

> Got it.
>
> I thought with functional programming all kinds of side effects
> are best avoided – including assignments.
> But there’s a tradeoff against readability (and maybe performance)
> and I agree that’s more important at least in this case.
> I take your advice (the assignment part) as a Wise Man’s Judgement
> I should follow until I know the language much better myself.
>
> Thanks for all the responses.
>
> Am 03.06.20 um 15:40 schrieb Henry Rich:
> > Write it using x and y, and assignment of intermediate results.
> >
> > Henry Rich
> >
> > On 6/3/2020 3:35 AM, Hauke Rehr wrote:
> >> Once again, starting with my example “onsub”
> >>
> >> I said I could use (u;[;]) for what I wanted
> >> I should have done this in order to make you
> >> see what I’m after
> >> So this is a cloumsy implementation based on
> >> Raul’s approach below
> >>
> >>    NB. long line, may span several lines on your screen
> >>    onsub2 =: 2 : '(3&{:: ;~ (0&{:: {. 1&{::) , (0&{:: ([ }. {."1)
> >> 1&{::) ,. 2&{::)@:([;];([: (u;v) [ }."1 }.))'
> >>
> >> Now I can
> >>    2 |. onsub2 # mat
> >> and get the desired result.
> >>
> >> Here |. and # are two operands but it’s
> >> a simple matter of juggling syntactic
> >> elements around.
> >>    2 (|.;#) onsub3 mat
> >> is a trivial substitution and
> >>    2 |.`# onsub4 mat
> >> isn’t hard to get done either.
> >> I don’t care that much about these details.
> >>
> >> What I do care about is all those parens and {::’s.
> >> It’s a hell of a mess not showing what’s going on.
> >> Too far away from Raul’s short readable “onsb” adverb.
> >>
> >> I thought there must be a clean way, still without
> >> any kind of assignment (other than to onsubN).
> >>
> >> And of course it’s only an example. In no way should
> >> the solution depend on |. and # as values for u and v
> >>
> >> Apologies again for my flood of rapidly thrown together
> >> posts. This time I think it should be possible to see
> >> what I want, how I tried to get it, and in which way
> >> I consider myself to have failed.
> >>
> >> Am 02.06.20 um 10:28 schrieb Raul Miller:
> >>> 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
> >>>
> >>
> >
> >
>
> --
> ----------------------
> mail written using NEO
> neo-layout.org
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>


-- 

Devon McCormick, CFA

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

Reply via email to