> 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
