> When I first read about it, I considered it a fun and approachable
> example – and it lends itself to folding so I support elaborating on
> this when compiling some learning material/show casing of folds.

I would simplify the example by considering the state to be just the coins
on the plate.  Thus,

   knave=. [ , \:~@:] }.~ #@:[

and the state history becomes,

   K (knave fold ]) P
 50 50 50 25 10 5
100 25 50 25 10 5
  5 10 25 25 10 5
 25 50 10 10  5 5
 25 10 10 10  5 5

and if one is only interested in the amounts on the plate, then those could
be produced as follows,

   K (knave fold (+/)) P
190 215 80 105 65

I often find illustrating the use of symbolic nouns and verbs, for example,

   u=. '('"_ , [ , ' u '"_ , ] , ')'"_
   v=. '('"_ , 'v '"_ , ] , ')'"_

   'X' u 'Y'
(X u Y)
       v 'Y'
(v Y)

to visualize the products of applied adverbs and conjunctions.  Thus, for
the (swapped) noun arguments,

   (4 2$'X0X1..XN') ; 'Y0'
┌──┬──┐
│X0│Y0│
│X1│  │
│..│  │
│XN│  │
└──┴──┘

the conjunction F:. produces,

   'Y0' v F:. u (4 2$'X0X1..XN')
(v (X0 u Y0))
(v (X1 u (X0 u Y0)))
(v (.. u (X1 u (X0 u Y0))))
(v (XN u (.. u (X1 u (X0 u Y0)))))

By the way, I tried to show that,

   (4 2$'X0X1..XN') u fold v 'Y0'

would produce the same result; but, for some reason, j902 did not comply.
Oh well...


On Fri, Feb 26, 2021 at 2:30 AM Hauke Rehr <[email protected]> wrote:
>
> I remember that knaves example.
> Glad to see you agree x/y are better used the other way around.
> P is a state altered by each of the knaves in K, respectively.
> Another good example showing that, if 'control' vs 'data' were
> a decisive creterion, the order of arguments would need to be changed.
>
> When I first read about it, I considered it a fun and approachable
> example – and it lends itself to folding so I support elaborating on
> this when compiling some learning material/show casing of folds.
>
>
> Automata are another example: a starting state is altered by
> successive transitions depending on items of a control input
> into an accepting state.
> So replaying a macro (fixed array of commands) takes any current
> situation (data) and applies the commands one after the other,
> resulting in the (hopefully intended) final situation.
>
> Maybe a “robot in a maze”-like game could show this where
> users are given a set of macros and some goal to achieve,
> and can apply the macros until they reach it, macros being
> replayed by a fold. I’ll add that one to the list of projects
> I’d hope to get around to implementing. Might even be used
> for teaching programming, just as the “laby” game does.
>
> https://sgimenez.github.io/laby/
>
>
> Am 26.02.21 um 02:33 schrieb Jose Mario Quintana:
> > Different people may have different preferences, mine is a form that I
have
> > used for many years and roughly corresponds to,
> >
> >    fold=. {{ y (v F:. u) x}}
> >
> >
> > Thus, the example in,
> >
> > Loopless Code VI: Temporary Variables (jsoftware.com)
> > <https://www.jsoftware.com/help/jforc/loopless_code_vi_temporary_v.htm>
> >
> > becomes,
> >
> >    knave=. [ ,~ \:~ @: (] }.~ [: # [)
> >
> >    ( P=. 100 25 100 50 5 10 )
> > 100 25 100 50 5 10
> >    ( K =. _2 ]\ 50 50 100 25 5 10 25 50 25 10 )
> >  50 50
> > 100 25
> >   5 10
> >  25 50
> >  25 10
> >
> >    K ([ (knave fold ] ) {:@:[ , ]) P
> > 100 100 50 25 10 5  50 50
> >  50  50 50 25 10 5 100 25
> > 100  50 25 25 10 5   5 10
> >  25  25 10 10  5 5  25 50
> >  50  25 10 10  5 5  25 10
> >
> > I hope it helps
> >
> >
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to