Your last (2) sentence(s) is what is/was confusing me. Now I know, I will try to remember. But (most) probably I will stick to my memo.
Thanks, R.E. Boss -----Original Message----- From: Programming <[email protected]> On Behalf Of Henry Rich Sent: dinsdag 7 september 2021 18:18 To: [email protected] Subject: Re: [Jprogramming] Fold experience Your diagram isn't right. Rather than a column y{UV, you need a column y, the first entry in which would be 3. The first application of foo is 3 foo 0 0 0 which gives a result of shape 3 3 . The next application of foo is 2 foo (3x3 array) giving shape 3 3 3, etc. The y in foo is NOT the items of the y input to Fold, but rather the initialization/feedback value. The x in foo is the items of the y input to Fold. Henry Rich On 9/7/2021 12:04 PM, R.E. Boss wrote: > In my example > > UV=:0,(,-@|.)=i.3 > foo=: {{ x+ y{UV }} > > and with the fold-diagram as guide, I thought the working of 0 0 0 ]F:. foo > 3 2 _3 would be > > y{UV x= 0 0 0 > v v > 0 0 1 ---> 0 0 1 > v v > 0 1 0 ---> 0 1 1 > v v > 0 0 -1 --> 0 1 0 > > but it is not. The output produced is completely incomprehensible to me, with > a shape of 3 3 3 3 3. > > With some reverse engineering I found out that swapping the y and x gives > what I want, so > 0 0 0 ]F:. (foo~) 3 2 _3 > 0 0 1 > 0 1 1 > 0 1 0 > > Memo to self: swap arguments (of inner verb) before fold. > > > R.E. Boss > > > -----Original Message----- > From: Programming <[email protected]> On Behalf Of > Henry Rich > Sent: dinsdag 7 september 2021 16:44 > To: [email protected] > Subject: Re: [Jprogramming] Fold experience > > Fold principles: > > 1. The items of y [and x] are applied to the x argument of v. This is > analogousto u/ y and u/\. y. The underlying J principle is that when a verb > operates multiple times, it operates repeatedly on its y argument. Thus the > result of each application of v is the y argument to the next v. > > 2. The same verb could be used for Fold Forward or Fold Reverse, with the > only difference being the order in which items are processed. > > 3. The optional x argument should be thought of as an additional item of y, > or if you like an initial value for the iteration. If given, it is the first > y argument to v. > > Henry Rich > > On 9/7/2021 7:15 AM, R.E. Boss wrote: >> OK, I thought that x was always on the left of a verb, and y on the right. >> Did not expect the diagram would have priority over that J axiom. >> Never too old to learn, although it will be quite confusing. Now I have >> normal, old-fashioned verbs, and verbs which will be folded. >> Apart from that, why does swapping the parameters (with ~) not work? >> >> Thanks. >> >> >> R.E. Boss >> >> >> -----Original Message----- >> From: Programming <[email protected]> On Behalf >> Of Raul Miller >> Sent: dinsdag 7 september 2021 11:28 >> To: Programming forum <[email protected]> >> Subject: Re: [Jprogramming] Fold experience >> >> The diagram shows the y argument to the fold on the left and the x argument >> to the fold on the right. So that cannot be the issue you are talking about. >> >> The diagram shows y0 being used first, y1 second and so on, which matches >> what we saw happening in action. So that cannot be the issue you are talking >> about. >> >> But that leaves me confused (an all-too-common event) -- what is the >> behavior which you are talking about which does not conform to that diagram? >> >> Thanks, >> >> -- >> Raul >> >> >> On Tue, Sep 7, 2021 at 5:19 AM R.E. Boss <[email protected]> wrote: >>> The main point I was trying to make was that F:. showed behaviour not >>> conform the diagram on https://code.jsoftware.com/wiki/Vocabulary/fcap. >>> The role of x and y seem to be interchanged. >>> However, then u F:.v~ should work, which does not. >>> >>> The advantage of fold is just that x can differ essentially from an item of >>> y, contrary to /\. , where all items are equal, and you are forced to use >>> boxes. >>> >>> >>> R.E.Boss >>> >>> >>> -----Original Message----- >>> From: Programming <[email protected]> On >>> Behalf Of Raul Miller >>> Sent: dinsdag 7 september 2021 10:16 >>> To: Programming forum <[email protected]> >>> Subject: Re: [Jprogramming] Fold experience >>> >>> Swapping the argument does not appear to influence the shape of the result. >>> >>> The results themselves are different, >>> >>> UV=:0,(,-@|.)=i.3 >>> foo=: {{ x+ y{UV }} >>> oof=: {{ y+ x{UV }} >>> >>> 0 0 0 (]F:.foo -: ]F:.foo~) 3 2 _3 >>> 0 >>> 0 0 0 (]F:.oof -: ]F:.oof~) 3 2 _3 >>> 0 >>> >>> That said, focusing on the variant which you described as providing the >>> desired behavior: >>> >>> 0 0 0 ]F:.oof 3 2 _3 >>> 0 0 1 >>> 0 1 1 >>> 0 1 0 >>> >>> This corresponds to: >>> 3 oof 0 0 0 >>> 0 0 1 >>> 2 oof 3 oof 0 0 0 >>> 0 1 1 >>> _3 oof 2 oof 3 oof 0 0 0 >>> 0 1 0 >>> >>> Which, in turn, somewhat matches the value selection mechanism of J's scan: >>> <\ 3 2 _3 >>> +-+---+------+ >>> |3|3 2|3 2 _3| >>> +-+---+------+ >>> >>> The difference between fold and scan being that fold reuses the result of >>> the previous evaluation while scan does not. >>> >>> I hope this makes sense, >>> >>> -- >>> Raul >>> >>> On Tue, Sep 7, 2021 at 2:09 AM R.E. Boss <[email protected]> wrote: >>>> [UV=:0,(,-@|.)=i.3 >>>> >>>> 0 0 0 >>>> >>>> 1 0 0 >>>> >>>> 0 1 0 >>>> >>>> 0 0 1 >>>> >>>> 0 0 _1 >>>> >>>> 0 _1 0 >>>> >>>> _1 0 0 >>>> >>>> >>>> foo=: {{ x+ y{UV }} NB. constructed conform the diagram on >>>> https://code.jsoftware.com/wiki/Vocabulary/fcap >>>> >>>> >>>> >>>> $0 0 0 (]F:. foo) 3 2 _3 >>>> >>>> 3 3 3 3 3 >>>> >>>> $0 0 0 (]F:. foo)~ 3 2 _3 >>>> >>>> 3 3 3 3 3 >>>> >>>> >>>> foo=: {{ y+ x{UV }} NB. y and x are swapped, counterintuitive >>>> >>>> >>>> >>>> $0 0 0 (]F:. foo) 3 2 _3 >>>> >>>> 3 3 >>>> >>>> 0 0 0 (]F:. foo) 3 2 _3 NB. this is the desired behaviour >>>> >>>> 0 0 1 >>>> >>>> 0 1 1 >>>> >>>> 0 1 0 >>>> >>>> $0 0 0 (]F:. foo)~ 3 2 _3 >>>> >>>> 3 3 >>>> >>>> Also remarkable is that swapping the arguments seems not to influence the >>>> result. >>>> Any clarification? >>>> >>>> >>>> R.E. Boss >>>> >>>> -------------------------------------------------------------------- >>>> -- 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 > > -- > This email has been checked for viruses by AVG. > https://www.avg.com > > ---------------------------------------------------------------------- > 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
