Talk:APL (programming language)

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 87.67.3.164 (talk) at 16:51, 4 July 2006 (→‎Rental cost of APL on IBM mainframes). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

APL is renowned for ... being able to express an air traffic control system in two lines of code.

I suspect this may be an exaggeration. --Brion 22:08 Sep 20, 2002 (UTC)

Probably, but it's not too far from the truth, and may well be literally true for some appropriate definitions of "line" and "traffic control system". It really does capture something of the flavor of the language; I'd be inclined to call it a colorful way to express that, or a rhetorical exaggeration. I don't think figures of speech like that are entirely out of place here. --LDC

Well, the quote about shuffling and dealing a deck with four non-standard characters is most certainly an exaggeration. The program is (I think) "13 4⍴52?52". Besides, that's just for four players, and a program for Rook would be three times as long. Quamaretto 15:41, 28 February 2006 (UTC)[reply]

You can use the other line for I/O, or constructing a GUI. Is that meant to be a joke? --Apus 13:01, 16 June 2006 (UTC)[reply]

APL character set

The current table doesn't do much for me, and I know I have Unicode installed. LaTeX has most, if not all, of the characters (I'm still figuring out how to get the sort function to work in LaTeX). Meanwhile, here's an APL keyboard layout image.... I'm working on permissions.

File:APL keyboard.gif

-- UtherSRG 15:55, 12 May 2004 (UTC)[reply]

I've commented out the table again. Perhaps some explicit instructions how how to ensure readability would be good. I know I have Unicode installed, but I can not see most of the APL symbols. - UtherSRG 14:24, 13 May 2004 (UTC)[reply]

Instructions will depend on the system you use.  Some browsers (e.g. Mozilla and Lynx under Linux) show all APL characters without any additional setup whatsoever.  There is no reason to hide the table, because it is not essential here.  Perhaps it will prompt readers to get an APL-compatible font if they are really interested in APL. — Monedula 14:48, 13 May 2004 (UTC)[reply]
I'm really interested in APL and I can't figure out what's wrong. I have MSIE 6.0.2. I have Unicode installed. What else is required?
Leaving the table there and broken for the majority of folks is not acceptable withouth giving good instructions on how to view it. When I asked Rex Swain (owner of the keyboard image) to use his image, he visited the page and said he couldn't view the table. There aren't many folks more interested in APL than he is. - UtherSRG 15:01, 13 May 2004 (UTC)[reply]
The broken table has made you aware of a problem? It is very good!
Now the instructions.  In MSIE go to menu, press Tools, then Internet Options.  In the dialog box press the button Fonts....  The "Fonts" dialog box appears.  In the Language script box select "Latin based".  Now in the Web page font box select a font what contains the APL symbols.  One of such fonts is Arial Unicode MS.  This font is supplied with "Microsoft Office" — if you have istalled it, then you should have the font.  If not, copy this font from someone else's machine.  Or get any other font that is both APL- and Unicode-compatible and install it, and then select it in the Web page font box.
In any case, displaying characters is the browser's problem, not Wikipedia's.  Wikipedia supplies information, browser displays it.  Do not break up this division of labour. — Monedula 15:31, 13 May 2004 (UTC)[reply]

Outdenting...Thanks for the instructions. As things stand, I have the following fonts that should display the APL symbols: Lucinda Sans Unicode, SImPL, VectorAPL, and SILDoulosUInicodeIPA. Of these, only SImPL displays the APL characters in the table, and the font is ugly for regular text. I've now installed Arial Unicode MS and things are good.

I'm fully in agreement with the division. It's just that when the information is only viewable if the user performs a reconfiguration, then it isn't really information, only raw unintelligible data. Doubly so when there are no instructions on how to perform that reconfiguration. - UtherSRG 15:57, 13 May 2004 (UTC)[reply]


Now, to complaints about the table's contents. It seems this table is far from complete. While the table has many overlayed characters, it doesn't have all of the individual characters used in the overlays, only the special characters. I think it wouldbe beneficial to have all of them, including the "common" characters like ?, (, and ). - UtherSRG 16:04, 13 May 2004 (UTC)[reply]

If we include ? and ( ), then probably we should include A-Za-z and 0-9 also?
As to browsers: I believe that future versions will display a much wider range of characters, perhaps downloading fonts automatically when they encounter something new. — Monedula 18:10, 13 May 2004 (UTC)[reply]

What do you think of the language J as an APL renewal? Marc Venot 02:24, 3 Aug 2004 (UTC)

  • J is very, very impressive. If you haven't tried it, give yourself a chance and download it: it is free. IMO, it is more powerful and much more orthogonal than any other APL I've seen. The only unsatisfied wishes I can think of when I use it are:
    1. I miss the user data type features provided by Backus FL (several of the more powerful J ideas come from FP via FL)
    2. ditto for the exception handling mechanism in FL
    3. direct, primitive support for dictionaries (K's handling of its namespaces through standard dictionaries would be very nice to have) and trees.
    4. pattern-based case parsing at function definition time (à la Miranda or Haskell)
    5. full, Perl-level, primitive support for regular expressions (currently it is handled through a library)
    6. the fact that not all primitives work transparently on both dense and sparse arrays (although many do)
    7. the fact that its Linux version runs on a Java-built interface, instead of, say, Qt
    8. K's mature support for data warehouses and other OLAP-related tasks
    9. last, but never least... a different way of encoding the dictionary verbs (J uses the idea of extended base characters for related functions, so that if + means something, then +. means something related and +: means something else related too... the problem is that all my years of reading have though my brain to see the '.' and ':' chars as separators and it is very hard to learn to see them attached to another character in an undivisible pair... furthermore, there is no lexical distinction between the monadyc and dyadic uses of a verb, making it even more difficult to parse what already are very dense (in the information-load sense) expressions)
  • In the end, though, J is the most powerful language I have ever used, and I would not consider anything else (except some kind of J descendant) to use as my main programming tool, at any price. When I work with J, I see things differently, in a fun, always entertaining way. Hope this helps a bit. — danakil 02:44, Sep 6, 2004 (UTC)

quote by dijsktra

"APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums". (Edsger Dijkstra)"

I have removed the quote by dijkstra on the following grounds:

  • The criticism was made towards the early versions of APL, particularly targeting its lack of support for structured and modular programming, at a moment where these two disciplines were taking over the world by storm.
  • Computer science was an explodind, intensely competitive field at that time, and thus it was then much more common for computer science luminaries to express themselves in ways that might have been customary then, but that today would be less acceptable for a serious researcher.
  • Finally, I will cite another quote by Dijkstra, criticizing another (now well respected) programming language for which I will initially remove the name calling it 'X' (note, please, that I have the greatest respect of Dijkstra's capabilities, and this is just to show that it is easy to obtain a quote supporting almost any topic from any great mind's past):
    • "X had its serious shortcomings: what became known as "shallow binding" (and created a hacker's paradise) was an ordinary design mistake; also its promotion of the idea that a programming language should be able to formulate its own interpreter (which then could be used as the language's definition) has caused a lot of confusion because the incestuous idea of self-definition was fundamentally flawed. [...] My first introduction was via a paper that defined the semantics of X in terms of X, I did not see how that could make sense, I rejected the paper and X with it. My second effort was a study of the X Manual from [Academic Institution] which I could not read because it was an incomplete language definition supplemented by an equally incomplete description of a possible implementation; that manual was poorly written that I coud not take its authors seriously, and rejected the manual and X with it." (Dijkstra, Computer Science: Achievements and Challenges)
  • Guessed which the language is? Right. Lisp. This should throw some light into the issue of how much weight can be given to his previous quote regarding APL. Dijkstra was a genius at computer science, but Iverson's and McCarthy's genius lay somewhere else, in the specific field of languages and systems that help people think. — danakil 02:25, Sep 6, 2004 (UTC)

quote by David Given

Is the "shuffling cards in four characters" quote true, or is it just a joke? If the former, the four characters should be given in the article; if the latter, maybe a comment to that effect would be nice.


The expression 52 ? 52 will give you a pesudo-random permutaion of the numbers from 1 to 52 (or 0 to 51, depending on the current index origin). This can reasonably be called "shuffling cards" although to display this list of values as symbold for cards would take a little more code. This is 5 characters, but only 3 symbols, as i would call a single number a single symbol, no matter how many digits it needs to represent it. In fact, this function is called "deal" which makes the suggested use tolerably obvious. Of course all of these characters appear on a standard keyboard.

To represent dealing 52 cards to 4 players, one might write something like:

D {gets} 4 13 {reshape} 52 ? 52

That is 11 characters, two of which are non standard: {gets} which represents the left-pointing assignment arrow, and {reshape} which represents the shape/reshape primitave function, a version of the greek character rho in a standard AL character set.

Do you think this like of code, perhaps in an image foramt should appear in the article to clarify (and in part debunk) the quote? DES 18:09, 21 Feb 2005 (UTC)

Sort Example

I cannot see whether it is correct or not (since indeed APL is a write-only language) -- but at least: where is the SORT operator?? --217.245.7.251 12:39, 5 Feb 2005 (UTC)


The primiive functions grade up, and grade down ((“) and (”) view with an APL font) -- they are not operators in APL terminology -- sort arrays of numeric values. If the array is multi-dimensional, a multi-way sort will be performed. The result is the set of indicies needed to reshape the array into a sorted form. Sorting of character data is also provided by these functions, but a left arguemt giving the collating sequence to be used must be supplied. A complex sequence (for example, upper and loewr case letters rating as identical unless needed to break ties) can be provided by using a multi-dimensional left argument. DES 17:50, 21 Feb 2005 (UTC)

Array operations vs "structured programming"

I have a problem with the semantic inference in the article vis-à-vis structured programming. The article says, for example, "... but the array operations it [APL] included could simulate structured programming constructs." In reality, it is structured program concepts, such as Do For, that are required (in other programming languages) to simulate the array operations natural to APL.

Array operations can reduce program size and complexity, often by an order of magnitude or more. Smaller programs – less code – usually offer fewer opportunities for coding errors.

It's not that structured programming is an absolute good in and of itself, but is, rather, a gimmick required to bring some semblance of order to more primitive programming languages lacking sophisticated array capabilities. -R. 21:46, 2005 May 23 (UTC)

I think that is going a bit far, and I am a full-time APL programemr, and a former chair of ACM/SIGAPL. It might be more accurate to say that in many cases structured programming and array operations can achieve the same result with different methods. There are some cases where other languages use structured constructs to do array processing. In particular the FOR loop was origianlly designed as a way to loop through the elements of an array in early FORTRAN, although it has been used for other purposes since. On the other hand, I have frequently seen array constructs used basically to simulate a classic structured construct in APL. For example the code:
{branch to} (<vector of line labels>)[<vector of possible values> {iota} {current value}
is a common APL idiom used to simulate a CASE structure, and used for exactly the purpsoe of a classic case structure, i.e. to transfer control to one of several code sections based on the current value of a varaible or expression, such that each possible value has a code section associated with it.
The general purpose of structured programming is to organize the flow of control. The general purpose of array operations is to organize the data and provide specialized tools to work with it without needing explicit contol flow for the low-level element-by-element processing. But many, indeed most significant, APL programs still need to manage control flow. Classic APL did this by simulating the structured constructs in most cases. Modern APL generally incorporates versions of structured programming constructs, such as ":IF/:ElseIf/:Else/:EndIf", ":Repeat/:Until", and ":For/:In/:EndFor" and the like. DES 21:25, 24 May 2005 (UTC)[reply]
While it is certainly true that lower-level languages can accomplish array operations -- with or without structured constructs -- I would not call those methods desirable, given that the problem admits of an easy array solution. Admittedly, not all problems are easily solved with array techniques. This situation usually derives from a poor, or inconvenient, data design.
I am reminded of a student in one of my classes who insisted on solving the homework problems using classic structured techniques, even though I took pains to make sure that an "APL solution" was possible. Her programs worked, but were always much more lengthy than the solutions I was after. She never "got it"; she never learned to think in the higher plane of multi-dimensioned arrays.
Since we are dragging out our credentials ;o) I was Chief Designer of an early (and little known) APL interpreter for an IBM system that was ultimately unsuccessful. Ours was the first interpreter to fully implement shared variables without any back-door hooks, and our design allowed general use of selection to the left of the assignment arrow. We were required to disable all but the "approved" indexing on the left, however.

---R. 02:59, 2005 May 29 (UTC)

I cited my credentials to indicate the level of my experience with APL, and that I am hardlt likely to needlessly trash APL, not to prove my case by "argument from authority".
In solving real-world (as oppsoed to academic) problems in APL, I often find structured constructs highly useful. I would never use them as a substitute for array operations -- handling arrays properly is afterall what APL does best -- but to handle true control-flow issues. Writing in an event-driven (i.e. windows) enviornemt, a CASE structure is invaluable, and there are various situations in which the looping constructs are highly useful. But the structure I use most often is probably the IF/ElseIf/Else constuct. Classic APL code uses this constuct frequettly, implementing it in the form of {branch} <label>{times}{iota}<condition or {branch} <condition>/<lable> or {branch} <inverted condition> <drop> <label> or another such idiom. IF/ELSE constructs are built by branching around branches, and a nested IF/Elseif construct can get quite baroque. The problem here isn't to get the code to do the needed branching on the appropriate conditions -- that works just fine. The problem is that the writing can be less clear to a future reader, particualrly a maintaining programmer. It is one thing to write code that works as it is first intended. it is quite another to write code that is modified and reworked again and again over the years, without needless waste of developer time. This can be done using classic APL, and done well -- I did it for a numbver of years before the structured constructs were available in the APL implemetation I was using -- but I find that the constructs make tis task far easier and simpler, when they are used properly. A programmer who insisted on using "classic" APL idioms where structured techniques are appropriate would not be long employed in my team. Neither would one who wrote APL like a non-array language, using loopiung constructs to handle an array one element at a time. DES 13:53, 30 May 2005 (UTC)[reply]

Character set

What does this mean?

Nevertheless, some critics attack not the use of a symbolic font, but rather the specific "purely circumstantial" choices that were made during the early implementation of APL, driven by the availability of a special kind of typewriter that would never become mainstream.

The unmentioned typewriter is the IBM Selectric (why was it unmentioned?). In fact, the whole sentence sounds a lot like innuendo. If this sentence can't be more specific, I'm going to delete it. Shoaler 12:41, 26 May 2005 (UTC)[reply]

Rental cost of APL on IBM mainframes

I used APL in a summer job, in 1980, doing budget spreadsheets for in-house IT use. I remember the company had only a few licenses. Recently, I saw a web page that cleaimed IBM's monthly license fee for APL for one user was something like $1K or $4K. Besides the paradigm issues, could this have held back acceptance of APL?

--MWS 20:15, 27 July 2005 (UTC)[reply]

As a matter of fact, in Europe at least, in the seventies there was quite an acceptance of APL. It was heavily used in what would now be called 'data mining'.
DEC even brought out a computer designed specifically to run APL programs. If I remember well it was called the 2020.
The basic papers by Codd on relational data bases, written long before RDBs became a reality, were directly inspired by the, then revolutionary, concept of handling data in arrays (tables) instead of linear files. In fact, all his illustrations were plain APL. One could say that relational data bases are the direct descendants of APL.
(What follows will probably be considered by many as POV. but I'm just writing from experience.)
In general APL was well accepted by end-users, but much less by the IT-department. Writing a decent APL program requires quite a different mind-set from writing a COBOL or C program. One concentrates on ""what"" is to be done instead of ""how"". It took MUCH less time for an end-user to become fluent in APL than for a professional programmer. Quite often professional programmers never attain any fluency in APL. (Maybe that explains also why APL has the reputation of being 'unreadable' and not C programs or UNIX-scripts, which are perfectly unreadable for non-programmers.)
Also, at a time when interactive use of computers was not widespread, the IT-department not always liked the unexpected supplementary use of central computer resources, especially by users who could not easily be controlled.
Many applications using APL could be replaced by spreadsheets on PC, standard statistical software packages, or the interactive use of relational data bases. These, the professional IT-specialist could control and live with, so support for APL was no longer needed, and APL largely disappeared.
The applications still remaining are usually of such a nature or complexity that it would be uneconomical or practically impossible to rewrite using standard IT-tools.
IBM was initially THE promoter of APL. It was also instrumental in its demise. I am certain that many PC users would love such a product, if they knew about it. (OK, that's pure POV). The steep license fee certainly doesn't help...
--87.67.3.164 16:32, 4 July 2006 (UTC)[reply]
  1. Expansion requests

, in Europe at least,

RAS Syndrome?

If APL stands for A Programming Language, doesn't this mean that the article name has RAS syndrome (A Programming Language programming language)? Maybe this should be moved to APL (language)... --Ihope127 16:39, 26 August 2005 (UTC)[reply]

There was never a programming language called "A Programming Language." The language is called APL and was named in tribute to a book titled A Programming Language by Ken Iverson, describing a similar notation. The name "APL" is not an initialism. –Shoaler (talk) 16:52, 26 August 2005 (UTC)[reply]
This is, in a sense, true, but many APL users typically explain that it stands for "A Programming Language". More recently the ACM's SIGAPL has interpreted the latters to stand for "Array Programing Langauges". DES (talk) 02:07, 29 September 2005 (UTC)[reply]
Not according to this link: http://www.sigapl.org/whyapl.htm KymFarnik 00:17, 15 April 2006 (UTC)[reply]
Individuals who don't know the origin of the name APL might make up all sorts of things for APL to stand for, and if they seem logical might be passed down to others. Doesn't make them true. –Shoaler (talk) 09:38, 15 April 2006 (UTC)[reply]

Opening Paragraph

Iverson notation was not invented to describe machines. Iverson himself wrote (in the J Dictionary):

APL originated in an attempt to provide consistent notation for the teaching and analysis of topics related to the application of computers, and developed through its use in a variety of topics, and its implementation in computer systems.

Also, the phrase "to document the IBM 360 microcode architecture" is problematic. The opening sentence in the Falkoff, Iverson & Sussenguth paper says

This paper presents a precise formal descriptioni of a complete computer system, the IBM SYSTEM/360.

The problems are:

It is the IBM System/360
It is not a replacement for the existing documentation
I don't believe that at the time that microcode was used in the implementation

Roger Hui 15:45, 1 October 2005 (UTC)[reply]

While working on APL\360 I spoke to Adin Falkoff about the formal description of System/360. Before the announcement of the 360 there was an audit committee within IBM. It's mission was to ensure that the five initial 360 models conformed to the standard architecture. Some minor deviations in areas such as machine checks etc were approved by the committee. The Falkoff, Iverson & Sussenguth model was subject to review by the audit committee.

F, I & S was to my knowledge the first public use of shared variables. There was also an unpublished description of the 360 I/O channel. IMHO the channelmodel was flawed because it used a single shared variable for inbound and outbound tags. This made rperesentation of certain error conditions impossible. It would have also made description of the 370 Data in and Data out tags impossible. Roger D. Moore Rdmoore6 21:45, 28 December 2005 (UTC)[reply]

POV?

In the Calculation section, I noticed the following statements:

APL was unique in the apparent speed with which it could perform complex matrix operations. For example, a very large matrix multiplication would appear to take only a few seconds on a machine which was much less powerful than those today... A widely cited paper "The APL Machine" perpetuated the myth that APL made pervasive use of lazy evaluation... (emphasis added)

I'm not personally involved one way or the other, but this paragraph looks like it's been edited by someone with a serious anti-APL vendetta. What in the world is "apparent speed"? Either a program is fast, or it's not. And if, as the rest of the paragraph states, some interpreters did use lazy evaluation, why is it called a "myth"? The whole section seems sort of inconsistent. --David Wahler (talk) 14:07, 13 October 2005 (UTC)[reply]

I wrote the original paragraph and did use apparent because, if lazy evaluation was used, the interpreter would appear to complete calculations which, in fact, were deferred until needed. But then someone came along and trashed the idea that lazy evaluation was used. I had always believed this was true and, having worked for IBM for some 38 years, had been told this was true, but I couldn't prove it. Can someone else speak with more authority on this? –Shoaler (talk) 10:03, 16 October 2005 (UTC)[reply]

The sentence "For example, a very large matrix multiplication would appear to take only a few seconds on a machine which was much less powerful than those today..." doesn't make much sense without stating how large is "very large". As "matrix multiplication" is O(n^3), a factor of 10 in matrix size would make a difference of factor 1000 in computing required, so a few seconds quickly become a few hours.

Unicode and APL

Just note to remind myself to fix this later... The character above the I-key (looks like a drunk tilda ~) does not have a unicode character listed in the unicode table. (Also epsilon unicode is missing)

NevilleDNZ 17:02, 26 November 2005 (UTC)[reply]

The character above I is iota, a Greek letter that does indeed have an unicode representation.

Full table of functions and operators

It would be great if someone could put together a full table of all the APL functions and operators with their meaning. --Macrakis 19:45, 12 December 2005 (UTC)[reply]

Sounds like a good idea. I'll take a stab at it. –Shoaler (talk) 20:42, 12 December 2005 (UTC)[reply]
Okay, I've created APL operators. Comments, corrections, additions, etc. welcome. –Shoaler (talk) 20:23, 13 December 2005 (UTC)[reply]

I have looked at APL operators. My major complaint is that the term 'operator' is used instead of 'function'. All of the items in the table refer what tradional APlers called functions. APL\360 had a samll number of operators: reduction, inner (matrix) product, and outer (Cartesian) product. Later versions such as APL II, SHARP APL, APL PLUS etc provided a much richer collection of operators.

One dyadic function is missing: Circle AoB A selected a trignometic or hyperbolic function of B

The descriptions of iota and query ignore index origin but this is acceptable in this context.

It appears that you are using a CSS downloaded font for the APL characters. This doesn't work in IE or Opera (I have been struggling with this on my own site for months.) A note recommending the use of a CSS2 compliant browser such as FIrefox or Safari would be desirable.

I believe that Adrian Smith has a nicer looking APL font than that which you are using. I can provide you with a private copy as a demo but obviously permission should be obtained from Adrian before it is used on Wiki. Ideally Adrian would publish via Wiki Common so that many could use it.Rdmoore6 19:49, 2 January 2006 (UTC)[reply]

Thanks for the suggestions. I realize that "operator" is not strictly accurate, but "function" includes user-defined functions too. Maybe "APL Symbols" or "APL Function Symbols" would be better. I'll add the circle function and put in a message about using a CSS2-compliant browser. –Shoaler (talk) 12:18, 8 January 2006 (UTC)[reply]
I have renamed the page APL function symbols. –Shoaler (talk) 19:11, 9 January 2006 (UTC)[reply]

Array Programming Language

APL never ever stood for Array Programming Language. It took its name from the book A Programming Language. Period. Please stop trying to revise history. Rlw (Talk) 03:06, 25 December 2005 (UTC)[reply]

Concur 100%. I first used APL in 1971 and it was and ONLY is "A Programming Language" from the KEI book! No if's but's or maybe's. FFS I had a copy of the bl**dy book. KymFarnik 07:17, 2 March 2006 (UTC)[reply]
Also refer IBM Publication- APL2 Language Summary SX26-3851-00 which also confirms A Programming Language with NO reference to any other name. KymFarnik 08:23, 2 March 2006 (UTC)[reply]
Another ref: ACM APL SIG http://www.sigapl.org/whyapl.htm (Defines: A Programming Language) KymFarnik 04:10, 3 March 2006 (UTC)[reply]
Concur. I have also been associated with APL since the early 70's and I never heard anyone use "Array Programming Language." Perhaps it was used in some latter-day marketing campaign that thought "A Programming Language" wasn't snazzy enough but that was never the name of the language. –Shoaler (talk) 16:21, 3 March 2006 (UTC)[reply]

Shared Variables

I rewrote the IPSANET article and found it necessary to mention some APL related things which are not described in wiki: 1] Shared variables were the basis of IPSA NSVP. APL SV introduced shared variables in 1973. SHARP APL added them later. Perhaps a brief article on shared variables would be desirable. 2] SHARP APL is an instance of an APL interpreter. There were many other interpreters. Adin Falkoff attempted to list the IBM interpreters. A more complete list would be desirable. Rdmoore6 20:50, 1 January 2006 (UTC)[reply]


POV Again

I've pulled the following out of the main article:

However, when implementing an APL module to be run using an interpreter (as was usual), a common tactic was to initially implement the module as separate, mostly understandable lines. Once the logic was verified, the lines would then be merged into one line for optimal processing in the interpreter. These APL one-liners, as they were called, were incomprehensible when viewed even a short time later. The accomplished APL programmer would document the function of the module in comments- if it had to be changed, the code would be discarded and re-implemented.

I'm not sure this is factual (who did this? when?), and if factual I don't know how relevant it is. Also the presentation ("...mostly understandable lines...") seems to not represent a neutral point of view, and could even be assuming the question. RaulMiller 06:40, 22 March 2006 (UTC) Concur KymFarnik 09:48, 22 March 2006 (UTC)[reply]

It was common for vendors of applications written in APL to remove all comments and string the lines together into a single line. This was supposed to speed up execution, but was also probably used to make it more difficult to reverse-engineer the code. –Shoaler (talk) 09:58, 22 March 2006 (UTC)[reply]