> From: Don Watson
> 
>   * I find tacit J to be clumsy, whereas, because explicit J is
>      elegant, it comes naturally.

Could this perhaps be influenced by your many years of prior exposure to APL? 

>   * I think that no one so far has answered my suggestions by looking
>     at what I am suggesting.
>   * I think that this results in both sides continually repeating
>     themselves.
>   * I think that in every example that has been provided, other than
>     very short expressions, I have been able to express the same tacit 
>      Form in a shorter, more elegant and more understandable form.

Skip Cave's suggestion of taking some of the J phrases and expressing them in 
your notation may be useful. You have done this for a couple of  In fact that 
is much the same approach that was taken by Hui et al. (1991) in their Quote 
Quad paper, Tacit Definition. 
<http://portal.acm.org/citation.cfm?id=114055.114077> They took 10 APL phrases 
from the FinnAPL Idioms and developed them as tacit J. 

I agree with his suggestion that the onus is on you to prove that your 
suggestion is better but here is one example anyway:
Verb to pick x values at random from set y with replacement.
   5 randNums 1 2 3 4 8 9 11 4 2 66
2 1 1 9 66
      (? x $ #y) { y   NB. Explicit J
      (?...@$ #) { ]      NB. Tacit J
      (? ([) $ #) { y  NB. Syntax for S - derived from explicit J using rules 
below

Stated rules for tacit S from an earlier post:
=====================================
  In the explicit J expression:
    1) Wherever there is a y to the left of a right parenthesis, remove it.
    2) Whenever there is a y to the left of dyadic verb, replace it by (]).
    3) Wherever there is an x replace it by ([).

    This has 3 rules, which are simple and small in number. It is logical,
because at execution time the system:
a) Can find all right parentheses and put the right argument to the left of
   them - from where y was taken.
b) Can find all "]" and place the left argument to their right,
   from where x was taken.
======================================

Firstly the above the rules will need some adjustment because they don't 
currently create tacit anything. Let's assume that the desired result for the 
rules for creating tacit S create was:
     (? ([) $ #) {

The rules for going the other way are worse:
To translate back to explicit J so the J interpreter understands it:
     (? ([y) $ #y) {

What about a sentence like this:
     (y * (x - y)) % y          NB. Explicit J
     ((]) * (([) - )) % y       NB. Translate to tacit S according to current 
rules
     ((]xy) * (([y) - y)y) % y  NB. Translate back to Explicit J according to 
current rules

I'm pretty sure that some of the issues here are because there are 
unintentional errors in the rules, but the point is that creating a simple set 
of rules that is unambiguous and works in all situations is not as simple as it 
seems.

> I am going to leave the issue for the moment. There is a point in
> such debate where things get to a deadlock. The unconscious mind 
> is a lot smarter than the conscious mind - I hope no one wants to 
> debate that ! This debate is best left for a while. I am willing 
> to reconsider my position if you are willing to reconsider yours.

The Bibliography of APL and J 
<http://www.jsoftware.com/jwiki/Essays/Bibliography> has many very interesting 
papers that may be of interest to you. A lot deal with the development of APL & 
J. Many use APL/J to explore different areas of mathematics.

Iverson, (1996) Computers and Mathematical Notation, 
<http://www.jsoftware.com/papers/camn.htm> discusses why using Mathematical 
notation as "the standard" may not be the best idea.

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to