I see below you've already covered the idea of a tacit expression not producing 
a noun.

Your discussion of  3 : '(+/y) % #y'  was very interesting! 
I agree it is a tacit expression, but that the resulting verb is explicit. Not 
sure how (or if) that needs resolving!

> From: Dan Bron
> 
> I wrote:
> >  Tacit code is expressed in terms of function composition, and
> >  doesn't mention its arguments.  Explicit code is expressed in
> >  terms of operations on values (arguments, nouns, variables,
> >  whatever) and definitionally mentions its arguments.
> 
> I'm trying to find a way to define tacit programming a way that matches
> our (my) intuition.  Bear with me for a while.
> 
> Because the majority of J programming consists of defining verbs, one
> (imperfect) way to make the distinction might be:  an
> explicit clause is one which produces a noun.  A tacit clause is one
> which doesn't.  A clause is a valid grammar production (and,
> by implication, tacit clauses may be embedded within arguments to  :
> ).
> 
> The distinction still isn't perfect because e.g.  +`-  is a valid
> grammar production which produces a noun, and yet is tacit, and
> a. + a:  is a valid grammer production which doesn't [produce a noun],
> and yet isn't [tacit].
> 
> But the scheme does help us classify e.g.  (+/%#) y  .  Within that
> sentence, the clause (grammar production)  +/%#  is tacit --
> it produces a verb.  Yet the sentence produces a noun, and so as a
> whole is explicit.  Which matches our intuition:  it mentions a
> variable.  Similarly, within  (+/%#)  the clause  +/  produces a verb,
> and so is tacit, which is true.  And, by that logic, since
> +  produces a verb, it too must be tacit [1].  And I doubt anyone would
> disagree that  plus=:+  is a (trivially) tacit verb.
> 
> However, the waters get murkier after this.  For example, how shall we
> classify  3 : '(+/y) % #y'  ?  The sentence produces a
> verb, and so, as a whole, must be tacit.  Recall that anonymous
> explicit verbs can be embedded in tacit verbs, e.g.  (- 3 : '(+/y)
> % #y')  .   Yet we balk: isn't  mean =:  3 : '(+/y) % #y'  an explicit
> verb?
> 
> Perhaps we can evade this problem by saying that "is an explicit verb"
> is a shorthand, and what we really mean is the clause
> (+/y)%#y  produces a noun, and so is explicit, and this explicit clause
> has "tainted" its container.
> 
> But we cannot escape for long.  Consider  +1 :'u/ % #'  .  Here, no
> nouns are produced, or even mentioned.  I suppose one could
> reasonably call it tacit, with a twinge of conscience.  That twinge is:
> we've mentioned an argument (u).  The truly tacit way to
> express this would be  + (/ (`%) (`#) (`:6))  .
> 
> But, as I said, since the majority of J programming consists of
> defining verbs, we rarely encounter such cases.  So, in broad
> strokes, we can divide explicit from tacit in terms or parse table
> productions:  0 1 2 are explicit, 3 4 are tacit, and 5 6 7 8
> are explicit when they produce nouns, and tacit otherwise [2].
> 
> -Dan
> 
> [1]  Which quickly has us conclude that any subclause of a tacit clause
> is tacit, and all tacit clauses is composed entirely of
> tacit subclauses.  Which also matches our intuition.
> 
> [2]  Can someone show me where the Dictionary promises the grammar
> productions  verb noun  and  noun verb noun  are guarunteed to
> produce nouns?  I must be tired, but I can't see it.
> 
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to