Hi Roger,
Your message was really helpful to me. Though I am certain that
my side of the elephant is valid, I am starting to see why your side is
needed. I'd like a little time to clarify, but I will make a
couple of preliminary comments below. Any part of your message not
included is something that I am thinking about and will respond to later.
You said:
- If "avoiding dyadic verbs and parentheses"
were design goals, I am not aware of them.
Obverse, square, decrement/increment are
useful in their own right, judged according to
Section 1 of "Notation as a Tool of Thought"
http://www.jsoftware.com/papers/tot.htm
(i.e. ease of expressing constructs arising
in problems, suggestivity, subordination of
detail, economy, and amenability to formal proofs.)
O.K., but out of the original design goals, reduced parentheses is a
valuable by-product.
You said
Regarding why there is v1@:v2@:v3 instead of
(v1 (v2 v3)), there is no document that tells
you the reason, but the answer is "obvious".
Which of the following is preferable?
v1 @: v2 @: v3 @: v4 @: v5 @: v6 @: v7
(v1 (v2 (v3 (v4 (v5 (v6 v7)))))
A less obvious reason is that having a symbol
for something makes it easier to talk about
(to reason about, to manipulate, etc.) that thing.
That's really helpful. I don't like parentheses. My point was
that neophytes would find it much easier to learn J if
someone told them why they needed to use things.
I will give you an analogy. I have been involved in a lot of
amateur dramatics in my lifetime. It's a good relaxing team
activity that is a lot of fun.
Sometimes something happens on stage that the audience
knows should not have happened. The most common
occurrence is that someone drops something by mistake.
It sits there in the middle of the stage. The audience
concentrates on what is going to be done about this
and finds it hard to concentrate on the play - until one of the
actors picks it up and the audience can give its total focus
back to the play.
My point here is that when you tell your audience something
that doesn't make sense and don't tell them why, they are
still focusing on worrying about why and can't give their
full attention to the next step.
I keep saying that I don't wish to criticize your documentation,
which is well written and thorough, but it is very weak in telling
why. For example, Chapter 3 of "Defining Functions" says:
square =: *:
sum =: + /
sumsq =: sum @: square
When the neophyte knows that in the explicit form
he/she has just learned, he/she can write:
sum square y
and:
+/ *: y
The argument that "@:" joins them together doesn't make sense.
Weren't they joined together in: +/*:y ? However, if you say
exactly what you have said above, that there are too many
parentheses in expressions like:
(v1 (v2 (v3 (v4 (v5 (v6 v7)))))
and there is a way of avoiding all of these parentheses by
linking them together:
v1 @: v2 @: v3 @: v4 @: v5 @: v6 @: v7
and that there is an additional benefit that it easier to talk about
(to reason about, to manipulate, etc.) the structure further down
the road, the neophyte is comfortable and can go
back to learning more about J.
So I am saying that all of your documentation has one major
problem. It is strong on what and how, but weak on why.
That is no problem for anyone on this forum, but a significant
barrier to neophytes. If you have a desire for broader usage,
that needs to be fixed.
Don
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm