Thank you, Skip. A small part of this mix is the Algebraic Logic System used for calculations on TI calculators and Reverse Polish Notation available on some HP calculators. In the latter, 2 3 4 + x is J's 2 * 3 + 4 .
Very advanced calculators do algebra and linear algebra, even providing intermediate steps for you to put on your homework paper. "Smart phones" can do J. What is next? --Kip Murray Sent from my iPad On Apr 19, 2013, at 11:52 AM, Skip Cave <[email protected]> wrote: > After thinking more about the issue of multiple glyphs vs single glyphs, I > realized that the underlying issue is that we are trying to compare three > very different types of languages here - natural languages, programming > languages, and mathematical languages. Each of these language types has > their own, often very different, requirements. > > Natural languages must support thousands, if not millions of concepts. > Natural languages are constantly mutating, with new concepts and words > being invented and discarded almost daily. The invention of alphabets, > which could be used to write natural languages, was a huge step towards > simplifying the teaching and implementation of alphabetic languages, when > compared to logosyllabic languages such as Mandarin. > > Ambiguity is rampant in natural languages. Certain words gain multiple > context-dependent meanings over time, and other words change meanings > dramatically, or simply disappear. Our brains have learned to cope with > this situation, as it is important for a natural language to be able to > evolve with the environment and experiences of it's users. > > Natural languages have to deal with all kinds of aberrations in the process > of communicating information. Spoken language must overcome individual > speech accents and styles, ambient noise, the receiver's audible acuity, > etc. Written communications must deal with handwriting styles, various > writing surfaces and instruments, the reader's visual acuity, etc. Natural > languages have evolved to help overcome these limitations. > > On the other hand, programming languages have very different, almost > opposite, requirements. Changes to a programming language must be carefully > vetted, typically by some central authority. This is done to in order to > verify that the changes won't affect current operations, or at least have > minimal impact. Otherwise, programs that we spent so much effort writing a > few years ago, may suddenly (shudder) STOP WORKING. This invariably causes > various levels of panic among the users of the program, who demand an > immediate fix by the authors (or their descendants), followed by a frantic > debugging session by same. > > This fact tends to make the mutation of any programming language a very > slow and deliberate process. Due to the problems with backward > compatibility, if a programming language seems to have too many defects, a > new language is developed, rather than try to fix the old one. It's easier > to develop a new language, than having to deal with the problems one > encounters when making significant changes in an existing language. > > A programming language must also have all vestiges of ambiguity scrubbed > out of it's syntax. If there is any ambiguity, the same program may > (double-shudder) .... have different results on different systems! > > The good news is that, unlike natural languages, most programming languages > have at most a few hundred basic or primitive concepts that define the > language. This small number of primitive concepts, along with the > low-mutation aspect, help lower the learning curve of most programming > languages, when compared to a natural language. Programs are constructed > from the basic set of non-ambiguous primitive functions, which will > hopefully execute in the same way, everywhere. > > The whole concept of "programming language" implies putting programs into a > computer, and getting results out of same. Thus, unlike a natural language > which can be spoken or hand-written, a programming language must have an > unambiguous noise-free way to input and view programs on a computer. Since > the ASCII keyboard and alphabet have been standardized on computers for > many years, (at least in the English-speaking world), it makes perfect > sense that programming languages would adopt that scheme for their use. > > Mathematics notation has a much longer history than programming languages, > though math notation does have a few characteristics in common with > programming languages. Basic math notation has been relatively stable over > the last few centuries, though new concepts and notations have been > gradually added over that period. The basic set of core mathematical > concepts/symbols is in the hundreds or so, much like a programming > language. This allowed most of these basic concepts to be represented by > various single-symbol conventions. Also, like a programming language, more > complex mathematical concepts can be communicated with various arrangements > of those basic mathematical symbols. > > However, today's mathematical notation has its problems. Ken Iverson covers > this issue quite eloquently in his ACM Turing Award presentation "Notation > as a Tool of Thought" in 1979. I will simply quote his words here: > > << > > "The importance of nomenclature, notation, and language as tools of thought > has long been recognized. In chemistry and in botany, for example, the > establishment of systems of nomenclature by Lavoisier and Linnaeus did much > to stimulate and to channel later investigation. > > Concerning language, George Boole in his Laws of Thought asserted “That > language is an instrument of human reason, and not merely a medium for the > expression of thought, is a truth generally admitted.” > > Mathematical notation provides perhaps the best-known and best-developed > example of language used consciously as a tool of thought. Recognition of > the important role of notation in mathematics is clear from the quotations > from mathematicians given in Cajori’s A History of Mathematical Notations. > They are well worth reading in full, but the following excerpts suggest the > tone: > > "By relieving the brain of all unnecessary work, a good notation sets it > free to concentrate on more advanced problems, and in effect increases the > mental power of the race." > A.N. Whitehead > > "The quantity of meaning compressed into small space by algebraic signs, is > another circumstance that facilitates the reasonings we are accustomed to > carry on by their aid." > Charles Babbage > > Nevertheless, mathematical notation has serious deficiencies. In > particular, it lacks universality, and must be interpreted differently > according to the topic, according to the author, and even according to the > immediate context. Programming languages, because they were designed for > the purpose of directing computers, offer important advantages as tools of > thought. Not only are they universal (general purpose), but they are also > executable and unambiguous. Executability makes it possible to use > computers to perform extensive experiments on ideas expressed in a > programming language, and the lack of ambiguity makes possible precise > thought experiments. In other respects, however, most programming languages > are decidedly inferior to mathematical notation and are little used as > tools of thought in ways that would be considered significant by, say, an > applied mathematician." > > > I re-read Ken's Turing Award speech every few years, and each time I > remember my excitement in discovering APL (after several Electrical > Engineering college classes using Fortran and Assembly). Back then, I could > envision a revolution in mathematics from grade school onward, using Ken's > notation instead of traditional mathematics notation. Children would learn > math on the blackboard, and slowly be brought to the realization that the > same math they were struggling with in school could be handed over to a > computer, without having to learn a new language. This would "relieve their > brains of unnecessary work, setting it free to concentrate on more advanced > problems", to paraphrase Whitehead. > > The key here is that students shouldn't have to learn a completely > different language, just to get their math homework done on a computer. Or > have to learn a new programming language to solve math problems later in > their career. They should be able to simply utilize the notation that they > learned in their mathematics classes in grade school, to formulate and > evaluate math problems that they encounter throughout their life. To do > this, you needed a truly unambiguous, general mathematics notation, and > that is what Ken proposed with APL. > > What Ken didn't forsee was the ongoing problem with the APL chatacter set. > When Ken designed APL, he was able to draw on the considerable resources of > IBM to implement his language and character set. Programmers implemented > the executable version of his notation. Mechanical and electrical engineers > designed the Selectric typewriter and it's interchangeable typeballs. > Graphic designers were employed to build the typeball fonts and new > keyboard labels (though they probably weren't called that back then). I > hate to think how much money IBM spent, making Ken's dream a reality. > > Unfortunately, the programming world mostly ignored the APL environment, > and instead standardized on a keyboard and character set that excluded APL. > That result wasn't all that surprising, since virtually every other > programming language could simply use the standard Qwerty keyboard and > ASCII character set. > > As the basic math concepts were discovered over the centuries, > mathematicians developed notation to represent these concepts, usually as > soon as the concepts were conceived. The problem was that the notations > they developed were often ambiguous and context-dependent, which required > additional description for clarification. By the mid-20th century computers > were developed which could potentially execute the functions represented > traditional math notation. Unfortunately, traditional math notation had > many ambiguities, and the multi-level equations and arcane symbols of > traditional math notation weren't particularly suited for input on a > computer. Thus programming languages were born. > > That's what happened with APL & J. It was the re-purposing of APL as a > programming language, rather than Iverson's original concept of a > mathematical notation, that drove J's conversion to the ASCII character > set. Most of the underlying concepts of APL remained the same in J. The > notation was changed to overcome the input and display limitations that > were present at the time. However, modern computing devices are rapidly > removing those limitations. Some hints as to what is happening today is > shown in the links below: > > Your mobile experience is not theirs: > http://tinyurl.com/cgm2f84 > > MyScript Calculator: > http://tinyurl.com/clj6sk5 > > The key dichotomy here is "programming language" versus "mathematical > notation". Students learned math notation in grade school. Then they might > learn a programming language at some later time. But those two languages > were treated as two completely different paradigms, rather than just a > natural progression of gradually-increasing notational power. The ideal > programming language should look identical, or at least very similar, to > the notation we learn in school. Then everyone would become a "programmer" > as soon as they wrote their math equations on a computing device. > > Skip > > -- > Skip Cave > Cave Consulting LLC > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
