Ah yes, but you can write a large project tacitly before you're fully 
equipped to do so.  I did that on my first J project, and it was a real 
trial by fire.  A hundred tacit verbs, each dependent on the ones above 
(the application was texture-map filtering for a flight-simulator database).

It worked great.  It was fast.  It was virtually unmaintainable.  I 
would hate for a new user to try that and give up on J.

It was a great experience, and I'd say it got me about 25% of the way to 
being proficient at tacit programming, but I think being a stylite is an 
easier job if self-improvement is what you're after.

J is fast to code and easy to change.  Large tacit programs are hard to 
change.  Why go there?

Henry Rich

On 9/26/2011 9:16 PM, bill lam wrote:
> I guess it is too early to ask.  Until you can write a large project with
> tacit form only, you do not have to choose.
>
> Пнд, 26 Сен 2011, Christopher McIntosh писал(а):
>> (Despite the conversations that have brought us to this point -- and
>> ignoring that scenario altogether)  I have a hypothesis that for the
>> long-term, a team equipped in a J-focused environment needs to have a very
>> detailed design-time road map to avoid a possible scenario in its project
>> whereby re-designing one aspect has a negative and significant impact on
>> unrelated aspects of the project.   For our team, we had become interested
>> in J because of highly regarded recommendations about its fit into an XP
>> environment.  At the same time, it appears that folks are suggesting that
>> design decisions are required to be made earlier (moreso comparable to the
>> waterfall paradigm).  And this is important to the long-term maintainability
>> (in terms of cost and time) of the project.
>>
>> For example, when considering a function (or function group) and choosing
>> the tacit implementation, I have been advised from 2 (seemingly?)
>> incompatible perspectives.
>>
>> One one hand, it is my understanding that one of the primary advantages to a
>> tacit design is the ability to abstract a dependency on names.  On the other
>> hand, I understand that, in an ambivalent function, such is not the case.
>>   That, unfortunately, this won't work for the dyadic half, since it could
>> not distinguish between local x and global x, as x is defined locally in
>> both the verb and the adverb.
>>
>> And when I look at some implementations, I see that this appears to be the
>> case.
>>
>> NB.*nl v selective namelist
>> NB. Form: [mp] nl sel
>>
>> NB.
>> NB.   sel:  one or more integer name classes, or a name list.
>> NB.         if empty use: 0 1 2 3.
>> NB.   mp:   optional matching pattern. If mp contains '*', list names
>> NB.         containing mp, otherwise list names starting mp. If mp
>> NB.         contains '~', list names that do not match.
>> NB.
>> NB.  e.g. 'f' nl 3      - list verbs that begin with 'f'
>> NB.       '*com nl ''   - list names containing 'com'
>> nl1=.(([:4!:1])&(]`(0 1 2 3"_)@.(0=#))) :: cutopen_*z*_
>> nlz=:(nl1 : ((4 : 0)nl1)) f.
>> if. 0 e. #y do. y return. end.
>>
>> if. #t=. x -. ' ' do.
>>   'n s'=. '~*' e. t
>>   t=. t -. '~*'
>>   b=. t&E.&>  y
>>   if. s do. b=. +./"1 b
>>   else. b=. {."1 b end.
>>   y=. y #~ n ~: b
>> end.
>> )
>>
>> I see that (on the dyad side of the picture) there is still reference to
>> local x. But, this should not be an issue, should it? Since we could go
>> ahead and reference x__anotherlocale. In my prima facie testing, I don't
>> notice the issue. Tests which had failed in previous tests, pass with this
>> example.
>>
>> I realize that the road ahead is a long one to become proficient at
>> recognizing some of the subtleties that, presently, have us perplexed.
>> ----------------------------------------------------------------------
>> 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