[Jprogramming] A phrase for amendment
Sherlock, Ric
R.G.Sherlock at massey.ac.nz
Wed Nov 24 09:58:31 HKT 2010
Thanks Dan that's fantastic!
Especially the step-by-step building. Would be worth putting up on the Wiki as a guide?
If you don't see yourself getting around to it, let me know and I'd be happy to do it as pay back for your time.
Ric
> -----Original Message-----
> From: programming-bounces at jsoftware.com [mailto:programming-
> bounces at jsoftware.com] On Behalf Of Dan Bron
> Sent: Wednesday, 24 November 2010 13:15
> To: 'Programming forum'
> Subject: Re: [Jprogramming] A phrase for amendment
>
> Ric wrote:
> > I would probably just define the verb
> > directly including the monad:
>
> If I don't know how to approach a problem tacitly, I'll define it explicitly
> first:
>
> 1 : 'u@:{`[`]}'
>
> This has the benefit of not baking in an argument (hence, reusability), but
> it also will help me work my way towards a tacit solution, as we'll see.
>
> > if you have a tips on how you
> > went about composing your adverb
> > I'd be interested.
>
> Sure. Come on over to the dark side.
>
> The first step towards building a tacit adverb is knowing exactly what you
> want as a result. In this case, we want u@{`[`]} . If you don't have a
> clear picture of what you want, building the solution explicitly first can
> help, as I said.
>
> Given a clear goal, and a few techniques, building a tacit adverb is
> actually a fairly mechanical process (hmm, maybe I can make an 11 : '...' )
> . Some techniques are:
>
> - a tacit adverb is an adverb train - that is,
> it is composed solely of adverbs.
>
> - normally those adverbs are either primitives,
> like / or bound conjunctions like (@{)
>
> - the argument comes in from the left, so you
> start modifying it there.
>
> - for verb arguments, normally you either want
> to compose them with other verbs, or you want
> to produce a train.
>
> - adverbs which produce composed verbs are
> easy to write, if you want (u conj
> something) you write (conj something),
> and if you want (something conj u) you
> write (something conj).
>
> That's the beauty of tacit code - the
> missing arguments are so "obvious",
> it's almost like writing "fill
> in the _____s."
>
> - adverbs which produce verb trains aren't
> quite as clean, but they're still easy
> and mechanical, and leverage the rule
> above and the utility (`:6). By definition,
> (f`g`h`i`j) `:6 produces (f g h i j) so
> if you want to produce that train given f,
> then you just write (`g)(`h)(`i)(`j)(`k)(`:6) .
> Similarly, if you wanted to produce
> (v0 f v1) given f, you'd write (v0`)(`v1)(`:6) .
>
> - when in doubt, parenthesize.
>
> - work iteratively, in small pieces:
>
> - Given f, I want g f"2&.>/@:(,&<) h .
>
> - OK, let me write an adverb that
> produces f"2 given f : ("2)
>
> - OK, let me write an adverb that
> produces f1&.> given f1=.f"2 : (&.>)
>
> - OK, let me write an adverb that produces
> f2/ given f2=.f1&.> : /
>
> - OK, let me write an adverb that produces
> f3@:(,&<) given f3=.f2/ : (@:(,&<))
> (or in two steps: (@:,) (,&<) )
>
> - OK, now I need a train g f4 h given
> f4=. f3@:(,&<) :
>
> - g will come to the left of f4 in the
> train, so: (g`)
>
> - h will come to the right of g and f4 in
> the train, so: (`h)
>
> - OK, now I've got my gerund, so let me
> evoke it as a train: (`:6)
>
> - OK, a tacit adverb is just a train of adverbs,
> so let me collect all my pieces in order:
>
> adv =. ("2) (&.>) / (@:(,&<)) (g`) (`h) (`:6)
>
> f adv
> g f"2&.>/@:(,&<) h
>
> See? Quite mechanical. Now, it can get more advanced than this,
> particularly through the manipulation of atomic representations.
>
> I won't get into that here, except to note that (`'') is an anonymous tacit
> adverb that will produce the atomic rep of its verb argument (well, the
> ravel of the a.r. of its verb argument), and once you have that, you can use
> normal tacit verbs to manipulate it to taste, then evoke it later with 5!:0
> . In some sense, (`'') is analogous to ("_) .
>
> If you want to get really advanced and fancy:
>
> - recognize that *everything* has an atomic
> representation (heh: Ambrus once found an
> atomic rep that was _its own atomic rep_).
>
> - get familiar with the definition of @.
> having a boxed noun RHA.
>
> -Dan
>
>
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
More information about the Programming
mailing list