53:
1167:. For instance, consider code that sets a variable to a starting location and then performs operations that may change the value - this is common in string scanning operations for instance, which will advance a cursor through the string as it scans. If the procedure fails, it is important that any subsequent reads of that variable return the original state, not the state as it was being internally manipulated. For this task, Icon has the
362:, named SIL for SNOBOL Intermediate Language, allowing it to be easily ported to any sufficiently powerful platform. This proposal was accepted as SNOBOL4 in September 1965. By this time, plans for a significantly improved version of the language emerged in August 1966. Further work on the language continued throughout the rest of the 1960s, notably adding the
335:. SCL, written by the department head Chester Lee, was both slow and had a low-level syntax that resulting in volumes of code for even simple projects. After briefly considering the COMIT language, Ivan Polonsky, Ralph Griswold and David Farber, all members of the six-person department, decided to write their own language to solve these problems.
943:; exceptions are unusual situations, not expected outcomes. Fails in Icon are expected outcomes; reaching the end of a file is an expected situation and not an exception. Icon does not have exception handling in the traditional sense, although fail is often used in exception-like situations. For instance, if the file being read does not exist,
947:
fails without a special situation being indicated. In traditional language, these "other conditions" have no natural way of being indicated; additional magic numbers may be used, but more typically exception handling is used to "throw" a value. For instance, to handle a missing file in the Java code,
877:
This means, "as long as read does not fail, call write, otherwise stop". There is no need to specify a test against the magic number as in the Java example, this is implicit, and the resulting code is simplified. Because success and failure are passed up through the call chain, one can embed function
484:
and SL5, from which they were taken): variables do not have to be declared, types are cast automatically, and numbers can be converted to strings and back automatically. Another feature common to many scripting languages, but not all, is the lack of a line-ending character; in Icon, lines that do not
3956:
never picks up the expected value. This could be dismissed as one of those "gotchas" that programmers have to be aware of in any language, but Tratt examined a variety of Icon programs and found that the vast majority of procedures are not generators. This means that Icon's default behaviour is only
423:
The new language was initially known as SNOBOL5, but as it was significantly different from SNOBOL in all but the underlying concept, a new name was ultimately desired. After considering "s" as a sort of homage to "C", but this was ultimately abandoned due to the problems with typesetting documents
716:
style that was sweeping the computer industry in the late 1960s. The second was to allow "failure" to be passed along the call chain so that entire blocks will succeed or fail as a whole. This is a key concept of the Icon language. Whereas in traditional languages one would have to include code to
408:
Griswold began the effort of implementing SNOBOL's underlying success/failure concept with traditional flow control structures like if/then. This became SL5, short for "SNOBOL Language 5", but the result was unsatisfying. In 1977, he returned to the language to consider a new version. He abandoned
247:
based on the concept of "goal-directed execution" in which code returns a "success" along with valid values, or a "failure", indicating that there is no valid data to return. The success and failure of a given block of code is used to direct further processing, whereas conventional languages would
290:
and textual patterns. String operations often fail, for instance, finding "the" in "world". In most languages, this requires testing and branching to avoid using a non-valid result. In Icon most of these sorts of tests are simply unneeded, reducing the amount of code that must be written. Complex
3142:
the second parameter is implicit and does not have to be specified by the programmer. In the common cases when multiple functions are being called on a single string in sequence, this style can significantly reduce the length of the resulting code and improve clarity. Icon function signatures
2251:
Of course there are times where one does want to find a string after some point in input, for instance, if scanning a text file that contains a line number in the first four columns, a space, and then a line of text. Goal-directed execution can be used to skip over the line numbers:
3883:
Laurence Tratt wrote a paper on Icon examining its real-world applications and pointing out a number of areas of concern. Among these were a number of practical decisions that derive from their origins in string processing but do not make as much sense in other areas. Among them:
3454:
This example can be made more robust through the use of a more appropriate "word breaking" Cset which might include periods, commas and other punctuation, as well as other whitespace characters like tab and non-breaking spaces. That Cset can then be used in
271:, he further developed the underlying SNOBOL concepts in SL5, but considered the result to be a failure. This led to the significantly updated Icon, which blends the short but conceptually dense code of SNOBOL-like languages with the more familiar syntax of
3960:
Another issue is the lack of a boolean data type and conventional boolean logic. While the success/fail system works in most cases where the ultimate goal is to check a value, this can still lead to some odd behaviour in seemingly simple code:
1593:
This appears to say "if y is smaller than x or 5 then...", but is actually a short-form for a generator that returns values until it falls off the end of the list. The values of the list are "injected" into the operations, in this case,
611:. SNOBOL's syntax operates directly on the success or failure of the operation, jumping to labelled sections of the code without having to write a separate test. For instance, the following code prints "Hello, world!" five times:
1602:
clause. However, if x is not larger than y it fails, and the alternator continues, performing y < 5. If that test passes, y is written. If y is smaller than neither x or 5, the alternator runs out of tests and fails, the
2087:
This tells it to scan starting at location 5, so it will not match the first instance we found previously. However, there may not be a second instance of "the" -there may not be a first one either- so the return value from
1074:
does not mean, "if the conditional expression evaluation results in or returns a true value" as they would under most languages; instead, it means something more like, "if the conditional expression, here
342:
in early 1963, and by the summer had been built out and was being used across Bell. This led almost immediately to SNOBOL2, which added a number of built-in functions, and the ability to link to external
2032:, find the first occurrence of "the", and return that index, in this case 4. The string, however, contains two instances of the string "the", so to return the second example an alternate syntax is used:
331:
Programming
Research Studies Department. The effort was a reaction to the frustrations of attempting to use the SCL language for polynomial formula manipulation, symbolic integration and studying
3170:
is the current position within it, or cursor. Icon's various string manipulation procedures use these two variables so they do not have to be explicitly supplied by the programmer. For example:
409:
the very powerful function system introduced in SL5 with a simpler concept of suspend/resume and developed a new concept for the natural successor to SNOBOL4 with the following principles;
3887:
The decision to fail by default at the end of procedures makes sense in the context of generators, but less so in the case of general procedures. Returning to the example noted above,
1514:
without reseting any of the state. When another call is made to the same function, execution picks up at that point with the previous values. In this case, that causes it to perform
252:
written by the programmer to achieve the same ends. Because the logic for basic control structures is often implicit in Icon, common tasks can be completed with less explicit code.
2780:
This code creates a table that will use zero as the default value of any unknown key. It then adds two items into the table, with the keys "there" and "here", and values 1 and 2.
1308:. A result sequence contains all the possible values that can be generated by the expression or function. When the result sequence is exhausted, the expression or function fails.
604:
the code will "fail", as the search term does not appear in the string. In JavaScript, as in most languages, this will be indicated by returning a magic number, in this case -1.
1033:
This case needs two comparisons: one for EOF and another for all other errors. Since Java does not allow exceptions to be compared as logic elements, as under Icon, the lengthy
1973:
operation found in many languages; this function looks for one string within another and returns an index of its location, or a magic number if it is not found. For instance:
912:
stops. Icon's branching and looping constructs are all based on the success or failure of the code inside them, not on an arbitrary boolean test provided by the programmer.
4643:
1598:. So in this example, the system first tests y < x, if x is indeed larger than y it returns the value of x, the test passes, and the value of y is written out in the
1969:
The concept of generators is particularly useful and powerful when used with string operations, and is a major underlying basis for Icon's overall design. Consider the
3154:
is not simply a form of syntactic sugar, it also sets up a "string scanning environment" for any following string operations. This is based on two internal variables,
2292:
The position will only be returned if "the" appears after position 5; the comparison will fail otherwise, pass the fail to write, and the write will not occur.
2848:
Substrings can be extracted from a string by using a range specification within brackets. A range specification can return a point to a single character, or a
488:
Procedures are the basic building blocks of Icon programs. Although they use Pascal naming, they work more like C functions and can return values; there is no
4059:
was released to the public some time later. He expressed his annoyance that the term was now confusing people who thought the language had graphical elements.
351:. The introduction of system functions served mostly to indicate the need for user functions, which was the major feature of SNOBOL3, released in July 1964.
4710:, University of Minnesota. Walker describes the work environment of the Icon project, his interactions with Griswold, and his own work on an Icon compiler.
840:, as it is explicitly understood by the language to mean "stop processing" or "do the fail case" depending on the context. The equivalent code in Icon is:
469:
keyword and similar syntax. On the other hand, Icon uses C-style braces for structuring execution groups, and programs start by running a procedure called
2092:
has to be checked against the magic number -1 which is used to indicate no matches. A complete routine that prints out the location of every instance is:
1414:
keyword, which means "return this value, and when called again, start execution at this point". In this respect it is something like a combination of the
708:
Icon retained the concept of flow control based on success or failure but developed the language further. One change was the replacement of the labelled
538:
or other techniques. For instance, a function that returns the position of a substring within another string is a common routine found in most language
4601:
432:
and the term "icon" began to enter the computer lexicon. The decision was made to change the name initially to "icon" before finally choosing "Icon".
267:
language. SNOBOL was a string-processing language with what would be considered dated syntax by the standards of the early 1970s. After moving to the
4732:
1966:
generator again which assigns 1 to x, which fails the right-hand-side and prints nothing. The result is a list of every even integer from 0 to 10.
4742:
4027:. Tratt supposed that it detracts from the self-documenting code, having supposed erroneously that it is testing "is c zero" or "does c exist".
306:. It also inspired other languages, with its simple generators being especially influential; Icon's generators were a major inspiration for the
4762:
3212:
Built-in and user-defined functions can be used to move around within the string being scanned. All of the built-in functions will default to
1294:
will evaluate and return x if the value of x is less than 5, or else fail. However, Icon also includes the concept of procedures that do not
1044:
Icon uses this same goal-directed mechanism to perform traditional boolean tests, although with subtle differences. A simple comparison like
534:
One of the key concepts in SNOBOL was that its functions returned the "success" or "failure" as primitives of the language rather than using
1611:
is not performed. Thus, the value of y will appear on the console if it is smaller than x or 5, thereby fulfilling the purpose of a boolean
397:
where column layout is natural. Additionally, control structures were almost entirely based on branching around code rather than the use of
4757:
2795:
the difference. Icon includes a number of pre-defined "Cset"s, a set containing various characters. There are four standard Csets in Icon,
3415:. In this case, it is looking for space characters, so the result of this function is the location of the first non-space character after
4752:
3952:
will result in 10 being printed. This sort of issue is not at all obvious as even in an interactive debugger all the code is invoked yet
3389:. In this case, the test is "is &pos zero", which, in the odd numbering of Icon's string locations, is the end of the line. If it is
1163:
A key aspect of goal-directed execution is that the program may have to rewind to an earlier state if a procedure fails, a task known as
424:
using that name. A series of new names were proposed and abandoned; Irving, bard, and "TL" for "The
Language". It was at this time that
2722:
generates a list containing 10 copies of "word". Like arrays in other languages, Icon allows items to be looked up by position, e.g.,
4737:
354:
SNOBOL3's introduction corresponded with major changes within the Bell Labs computing department, including the addition of the new
721:
and then branch based on the outcome, such tests and branches are inherent to Icon code and do not have to be explicitly written.
4382:
385:
As a language originally developed in the early 1960s, SNOBOL's syntax bears the marks of other early programming languages like
192:
1304:, and are a key part of the Icon language. Within the parlance of Icon, the evaluation of an expression or function produces a
2823:
In Icon, strings are lists of characters. As a list, they are generators and can thus be iterated over using the bang syntax:
3385:
that allows Icon's goal-directed flow control to be easily used without having to provide hand-written boolean tests against
1958:
and returns an initial value of 0 which is assigned to x. It then performs the right-hand side of the conjunction, and since
4089:
Although, as Tratt points out, K&R C also lacks an explicit boolean type and uses 0 for false and any non-zero for true.
244:
1662:
and one can also use it to construct arbitrary lists of values. This can be used to iterate over arbitrary values, like:
358:
mainframe which would require a rewrite of SNOBOL. Instead, the team suggested writing a new version that would run on a
180:
65:
2958:
within an expression. This can be used to insert strings into another string or delete parts of a string. For example:
878:
calls within others and they stop when the nested function call fails. For instance, the code above can be reduced to:
4696:, University of Minnesota. Goldberg discusses his interaction with Griswold when working on Icon in the classroom at
4624:
4535:
2852:
of the string. Strings can be indexed from either the right or the left. Positions within a string are defined to be
1518:, loop back to the start of the while block, and then return the next value and suspend again. This continues until
4697:
1299:
748:
will eventually run out of characters to read from the file, potentially on its very first call, which would leave
4747:
2420:
1615:. Functions will not be called unless evaluating their parameters succeeds, so this example can be shortened to:
3957:
used by a tiny minority of its constructs, yet represents a major source of potential errors in all the others.
3220:
to allow the scanning syntax to be used. The following code will write all blank-delimited "words" in a string:
1263:
1156:, a common type of comparison that in most languages must be written as a conjunction of two inequalities like
547:
458:
307:
303:
280:
228:
199:
17:
1095:
or the next line if it fails. The result is similar to the traditional if/then seen in other languages, the
1037:
syntax must be used instead. Try blocks also impose a performance penalty even if no exception is thrown, a
3466:
A more complex example demonstrates the integration of generators and string scanning within the language.
2955:
379:
299:
121:
3138:
takes two parameters, the search text as parameter one and the string to search in parameter two. Using
1298:
return success or failure, and instead return new values every time they are called. These are known as
3144:
2432:
2428:
1183:. For instance, consider some code that is attempting to find a pattern string within a larger string:
1140:
operator returns its second argument if it succeeds, which in this example will result in the value of
535:
2783:
Sets are also similar to lists but contain only a single member of any given value. Icon includes the
4707:
4693:
4683:
3361:. It may not be immediately obvious why one would need this function and not simply use the value of
2424:
725:
287:
232:
2447:. Collections are inherent generators and can be easily called using the bang syntax. For instance:
291:
pattern handling can be done in a few lines of terse code, similar to more dedicated languages like
2440:
454:
429:
378:
in August 1971. He introduced SNOBOL4 as a research tool at that time. He received grants from the
276:
3443:; it returns the location immediately prior to its provided Cset, which the example then sets the
4055:
According to an interview in 1985, Griswold states that the term 'icon' was not being used until
2623:
Because the list collection is a generator, this can be further simplified with the bang syntax:
4686:, University of Minnesota. Wampler discusses his work on the development Icon in the late 1970s.
2730:
is included, allowing new lists to be created out of the elements of other lists, for instance,
2559:
Using the fail propagation as seen in earlier examples, we can combine the tests and the loops:
757:
713:
450:
295:
but retaining a more function-oriented syntax familiar to users of other ALGOL-like languages.
69:
393:. In particular, the language is column-dependant, as many of these languages were entered on
1738:
As lists of integers are commonly found in many programming contexts, Icon also includes the
375:
268:
2682:
causes Icon to return a line of text one by one from the array and finally fail at the end.
1311:
Icon allows any procedure to return a single value or multiple values, controlled using the
1111:. The subtlety is that the same comparison expression can be placed anywhere, for instance:
302:, but an object-oriented extension named Idol was developed in 1996 which eventually became
4545:
Griswold, Ralph; Griswold, Madge (March 1993). "History of the Icon
Programming Language".
60:
1814:
Icon is not strongly typed, so the alternator lists can contain different types of items:
347:
code. It was released in April 1964 and mostly used within Bell, but also saw some use at
8:
1152:, but an operator that returns a value, they can be strung together allowing things like
398:
732:
to read a character from a (previously opened) file, assigns the result to the variable
4630:
4562:
940:
477:
939:
It is important to contrast the concept of success and failure with the concept of an
4620:
4531:
2436:
1278:
should be reset to its previous value if the block fails. This provides an analog of
932:
continues calling its block until it receives a fail. Icon refers to this concept as
363:
344:
32:
This article is about the programming language. For pictogram or computer image, see
4634:
4612:
4588:
4554:
4115:
1415:
1038:
33:
4566:
3411:
finds one or more examples of the provided Cset parameter starting at the current
2714:
The items can included other structures. To build larger lists, Icon includes the
405:. By the time he moved to Arizona, the syntax of SNOBOL4 was hopelessly outdated.
2219:"All the world's a stage. And all the men and women merely players"
2103:"All the world's a stage. And all the men and women merely players"
1984:"All the world's a stage. And all the men and women merely players"
359:
286:
Like the languages that inspired it, the primary area of use of Icon is managing
87:
2691:
2369:
actually injects values into the function in a fashion similar to blocks under
539:
256:
152:
92:
52:
2811:. New Csets can be made by enclosing a string in single quotes, for instance,
4726:
4525:
2849:
2737:
Tables are essentially lists with arbitrary index keys rather than integers:
2727:
2303:, looping through every item returned by a generator and exiting on failure:
1279:
718:
249:
4616:
4156:
3143:
identify the subject parameter in their definitions so the parameter can be
327:
effort, retroactively known as SNOBOL1, launched in the fall of 1962 at the
4717:
4404:
332:
4558:
2951:
Where the last example shows using a length instead of an ending position
768:(end-of-file) in this situation, which requires an explicit test to avoid
485:
end with a semicolon get ended by an implied semicolon if it makes sense.
348:
147:
4713:
4135:
2208:
is a generator, so the same results can be created with a single line:
543:
425:
394:
2701:
As Icon is typeless, lists can contain any different types of values:
4056:
4036:
2370:
1258:
fails, the block will fail as a whole, which results in the value of
328:
260:
37:
4670:
401:, which were becoming a must-have feature after the introduction of
4155:
Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 May 2001).
1527:
712:-like branching with block-oriented structures in keeping with the
402:
339:
701:
ucceeds, meaning I is less than 5, it branches to the named label
4663:
4270:
4268:
4266:
4264:
4262:
1494:
creates a generator that returns a series of numbers starting at
546:
one might want to find the position of the word "World" within a
386:
163:
3353:
There are a number of new functions introduced in this example.
3327:# the next word is up to the next blank -or- the end of the line
2845:
Will print out each character of the string on a separate line.
2734:
produces a new list called aCat that contains "tabby" and 2002.
1872:
This writes 1, "hello" and maybe 5 depending on the value of x.
4674:
4502:
4304:
4140:
4120:
1323:
keywords. A procedure that lacks any of these keywords returns
481:
355:
324:
264:
211:
80:
4316:
4292:
4259:
4007:
This program will print "taken". The reason is that the test,
4703:
4689:
4679:
4340:
4328:
4023:
succeeds. To test this, one needs to make the test explicit,
4015:, the default value for all otherwise uninitiated variables.
1290:
Expressions in Icon may return a single value, for instance,
1254:
to 10, the starting location for the search. However, if the
1025:// something else went wrong, use this catch to exit the loop
446:
390:
272:
215:
4602:"Experiences with an icon-like expression evaluation system"
744:
to another file. The result is to copy one file to another.
36:. For Icon-L graphical programming of embedded systems, see
4718:
The
Rosetta Code comparative programming tasks project site
4574:
Griswold, Ralph (1981). "13". In
Wexelblat, Richard (ed.).
4175:
2407:
In this case, the values from i to j will be injected into
2373:. For instance, the above loop can be re-written this way:
419:
SL5 features, excluding the generalized procedure mechanism
292:
4434:
4432:
4430:
1079:
operation, succeeds and does not fail". In this case, the
607:
In SNOBOL a failure of this sort returns a special value,
366:
type in later version, which they referred to as a table.
4593:
Department of
Computer Science, The University of Arizona
4589:"An Overview of the Icon Programming Language; Version 9"
3451:. Alternation is used to also stop at the end of a line.
2439:(also known as maps or dictionaries in other languages),
1962:
does equal 0, it writes out the value. It then calls the
4154:
4427:
1395:. This can lead to non-obvious behavior, for instance,
724:
For instance, consider this bit of code written in the
4492:
4490:
4488:
4486:
4473:
4471:
4469:
4467:
4465:
4463:
4461:
4459:
4365:
4363:
4361:
4359:
4357:
4355:
4280:
4247:
4235:
4223:
4211:
4199:
4187:
2361:
re-evaluates the first result until it fails, whereas
1148:, otherwise nothing is written. As this is not a test
920:
block if its "test" returns a value, and performs the
693:
To perform the loop, the less-than-or-equal operator,
4609:
Proceedings of the 6th symposium on
Dynamic languages
4444:
3801:# Matching function that returns a string of n digits
3087:
A further simplification for handling strings is the
374:
Griswold left Bell Labs to become a professor at the
2503:# use stack-like syntax to push the line on the list
577:, which would return 7. If one instead asks for the
4483:
4456:
4415:
4352:
1522:fails, at which point it exits the block and calls
3166:is simply a pointer to the original string, while
3134:, and passes it into string functions. Recall the
2411:and (potentially) write multiple lines of output.
1410:Converting a procedure to be a generator uses the
1083:operator succeeds if the comparison is true. The
476:In many ways Icon also shares features with most
4724:
4544:
4523:
4508:
4346:
4334:
4322:
4310:
4298:
4274:
3891:will not output which may be expected. However:
3369:is a variable and thus cannot take on the value
2954:The subscripting specification can be used as a
4530:(third ed.). Peer-to-Peer Communications.
752:in an undetermined state and potentially cause
697:, is called on the index variable I, and if it
3522:# a string that matches a day month dayofmonth
1327:, which occurs whenever execution runs to the
924:block or moves to the next line if it returns
4576:A History of the SNOBOL Programming Languages
4076:in this case as it is immediately before the
2698:continues reading lines until the file ends.
2536:# loop while lines can be popped off the list
1883:, is used in a fashion similar to a boolean
1658:Internally, the alternator is not simply an
1537:, which looks and operates like the boolean
382:to continue supporting and evolving SNOBOL.
4690:Oral history interview with Robert Goldberg
4680:Oral history interview with Stephen Wampler
4704:Oral history interview with Kenneth Walker
1091:clause if the expression succeeds, or the
529:
453:languages, and thus has syntax similar to
4524:Griswold, Ralph; Griswold, Madge (2002).
3789:# Either a blank or the end of the string
3519:# Define a matching function that returns
3427:to that location, again with a potential
3126:Icon refers to the left-hand-side of the
2365:fetches the next value from a generator.
1533:Another type of generator-builder is the
1510:stops execution and returns the value of
4586:
4573:
4450:
4438:
4241:
4229:
4217:
4205:
4193:
4181:
4113:
2482:# loop reading lines from standard input
461:. Icon is most similar to Pascal, using
263:where he was a major contributor to the
4733:Dynamically typed programming languages
4641:
4398:
4396:
4286:
4253:
3243:# Establish string scanning environment
413:SNOBOL4's philosophic and sematic basis
338:The first versions were running on the
27:A very high-level programming language.
14:
4743:Pattern matching programming languages
4725:
445:The Icon language is derived from the
4763:Programming languages created in 1977
4599:
4496:
4477:
4421:
4369:
4011:, does return a value; that value is
3095:, which calls functions on a string:
717:test the success or failure based on
616:* SNOBOL program to print Hello World
428:began publishing about their work on
4402:
4393:
4114:Townsend, Gregg (January 26, 2024).
2872:and can be specified from the right
2720:i := list(10, "word")
2443:and others. Icon refers to these as
369:
245:very high-level programming language
4758:Text-oriented programming languages
4600:Tratt, Laurence (18 October 2010).
1262:being left at 10 as an undesirable
1158:if (a < b) && (b < c)
1144:being written if it is larger than
828:function returns a line of text or
24:
4753:SNOBOL programming language family
4714:The Icon Programming Language page
3381:provides a lightweight wrapper on
3082:
2787:to produce the union of two sets,
2349:There is a key difference between
127:9.5.24a / January 17, 2024
25:
4774:
4655:
3435:falls off the end of the string.
4738:Icon programming language family
4698:Illinois Institute of Technology
4587:Griswold, Ralph (2 March 1996).
4580:History of Programming Languages
4080:. It has been added for clarity.
1403:fails and suspends operation of
51:
4517:
4375:
4083:
4077:
4069:
4062:
4049:
4024:
4020:
4016:
4012:
4008:
3953:
3888:
3795:# And finally return the string
3750:# Followed by at least 2 digits
3460:
3456:
3448:
3444:
3440:
3436:
3432:
3428:
3424:
3420:
3416:
3412:
3408:
3402:
3398:
3394:
3386:
3382:
3378:
3374:
3370:
3366:
3362:
3358:
3354:
3217:
3213:
3167:
3163:
3159:
3155:
3151:
3139:
3135:
3127:
3092:
2812:
2808:
2804:
2800:
2796:
2792:
2788:
2784:
2731:
2723:
2719:
2715:
2695:
2687:
2686:is a generator-based analog of
2683:
2679:
2408:
2366:
2362:
2358:
2354:
2350:
2300:
2296:
2205:
2089:
2029:
1970:
1963:
1959:
1955:
1884:
1880:
1739:
1659:
1612:
1608:
1604:
1599:
1595:
1538:
1523:
1519:
1515:
1511:
1507:
1503:
1499:
1495:
1421:
1416:
1411:
1404:
1400:
1396:
1392:
1388:
1384:
1328:
1324:
1320:
1316:
1312:
1291:
1275:
1271:
1267:
1259:
1255:
1251:
1180:
1172:
1157:
1153:
1145:
1141:
1137:
1136:Another difference is that the
1108:
1104:
1100:
1096:
1092:
1088:
1084:
1080:
1076:
1068:"a is smaller than b"
1045:
1034:
944:
929:
925:
921:
917:
913:
909:
905:
901:
837:
833:
829:
825:
769:
765:
761:
753:
749:
745:
741:
737:
733:
729:
709:
702:
698:
694:
608:
578:
551:
489:
470:
466:
462:
440:
4148:
4128:
4107:
3439:is essentially the reverse of
2414:
1331:of a procedure. For instance:
13:
1:
4527:The Icon Programming Language
4403:Lane, Rupert (26 July 2015).
4157:"PEP 255 – Simple Generators"
4096:
3878:
3401:, which is inverted with the
3365:directly; the reason is that
3357:returns the current value of
2813:vowel := 'aeiou'
1530:to be constructed with ease.
1285:
4509:Griswold & Griswold 2002
4347:Griswold & Griswold 2002
4335:Griswold & Griswold 2002
4323:Griswold & Griswold 2002
4311:Griswold & Griswold 2002
4299:Griswold & Griswold 2002
4275:Griswold & Griswold 1993
4163:. Python Software Foundation
4161:Python Enhancement Proposals
4101:
3534:# Define some initial values
3510:"not a valid date"
3231:"this is a string"
3181:"this is a string"
1399:will output nothing because
465:syntax for assignments, the
7:
4642:Shapiro, Ezra (July 1985).
4383:"Array.prototype.indexOf()"
4116:"Update version to 9.5.22e"
4030:
1387:will return 1, but calling
1250:This code begins by moving
1041:that Icon normally avoids.
836:is not simply an analog of
550:, which would be done with
435:
380:National Science Foundation
104:; 47 years ago
10:
4779:
3196:"subject=, pos="
2818:
2678:In this case, the bang in
2028:This will scan the string
764:returns the special value
313:
31:
4708:Charles Babbage Institute
4694:Charles Babbage Institute
4684:Charles Babbage Institute
2837:"Hello, world!"
2427:that can also be used as
824:In contrast, in Icon the
726:Java programming language
637:"Hello, world!"
430:graphical user interfaces
318:
275:-inspired languages like
226:
221:
210:
205:
198:
191:
186:
178:
158:
146:
142:
120:
116:
98:
86:
76:
59:
50:
4042:
3963:
3893:
3468:
3405:and the loop continues.
3270:# Test for end of string
3222:
3206:
3172:
3097:
2960:
2892:
2825:
2739:
2703:
2625:
2561:
2449:
2375:
2305:
2254:
2210:
2204:In Icon, the equivalent
2094:
2034:
1975:
1889:
1816:
1788:
1786:which can be shortened:
1748:
1664:
1617:
1543:
1541:operator. For instance:
1426:
1333:
1185:
1113:
950:
900:In this version, if the
880:
842:
774:
728:. It calls the function
613:
586:"Hello, World"
559:"Hello, World"
494:
4617:10.1145/1869631.1869640
4405:"SNOBOL - Introduction"
3723:# Followed by the month
3431:in case, for instance,
2690:that reads a line from
2299:operator is similar to
934:goal-directed execution
548:"Hello, World!" program
530:Goal-directed execution
4748:Public-domain software
3373:, which the procedure
3291:# Skip past any blanks
2791:the intersection, and
2570:# create an empty list
2458:# create an empty list
2419:Icon includes several
758:null pointer exception
714:structured programming
451:structured programming
129:; 7 months ago
4559:10.1145/155360.155363
4019:is a valid value, so
3735:# Followed by a blank
3696:# Followed by a blank
3486:"Mon Dec 8"
3091:system, invoked with
3038:"abABCDefg"
2940:"Knowledge"
2931:"Knowledge"
2922:"Knowledge"
2913:"Knowledge"
2904:"Knowledge"
2895:"Knowledge"
1742:keyword to construct
1169:reversible assignment
376:University of Arizona
269:University of Arizona
255:Icon was designed by
4184:, pp. 601, 602.
2551:# write the line out
1877:conjunction operator
1746:integer generators:
908:call fails, and the
4650:. pp. 341–350.
3047:"abcdefg"
3008:"abcdefg"
2724:weight := aCat
2618:# write until empty
1502:, and then returns
1177:reversible exchange
598:"Goodbye"
478:scripting languages
416:SL5 syntactic basis
99:First appeared
47:
4611:. pp. 73–80.
2594:# push until empty
1282:in the execution.
1154:if a < b < c
45:
4644:"SNOBOL and Icon"
4582:. Academic Press.
3993:"taken"
3147:in this fashion.
3077:"abefg"
2999:"a123c"
2732:aCat := Cats
1837:"hello"
1420:concept in C and
760:. To avoid this,
571:"World"
492:keyword in Icon.
370:SL5 leads to Icon
364:associative array
345:assembly language
238:
237:
148:Typing discipline
16:(Redirected from
4770:
4667:
4666:
4664:Official website
4651:
4638:
4606:
4596:
4583:
4570:
4541:
4512:
4506:
4500:
4494:
4481:
4475:
4454:
4448:
4442:
4436:
4425:
4419:
4413:
4412:
4400:
4391:
4390:
4379:
4373:
4367:
4350:
4344:
4338:
4332:
4326:
4320:
4314:
4308:
4302:
4296:
4290:
4284:
4278:
4272:
4257:
4251:
4245:
4239:
4233:
4227:
4221:
4215:
4209:
4203:
4197:
4191:
4185:
4179:
4173:
4172:
4170:
4168:
4152:
4146:
4145:
4132:
4126:
4125:
4111:
4090:
4087:
4081:
4079:
4071:
4066:
4060:
4053:
4026:
4022:
4018:
4014:
4010:
4003:
4000:
3997:
3994:
3991:
3988:
3985:
3982:
3979:
3976:
3973:
3970:
3967:
3955:
3948:
3945:
3942:
3939:
3936:
3933:
3930:
3927:
3924:
3921:
3918:
3915:
3912:
3909:
3906:
3903:
3900:
3897:
3890:
3874:
3871:
3868:
3865:
3862:
3859:
3856:
3853:
3850:
3847:
3844:
3841:
3838:
3835:
3832:
3829:
3826:
3823:
3820:
3817:
3814:
3811:
3808:
3805:
3802:
3799:
3796:
3793:
3790:
3787:
3784:
3781:
3778:
3775:
3772:
3769:
3766:
3763:
3760:
3757:
3754:
3751:
3748:
3745:
3742:
3739:
3736:
3733:
3730:
3727:
3724:
3721:
3718:
3715:
3712:
3709:
3706:
3703:
3700:
3697:
3694:
3691:
3688:
3685:
3682:
3679:
3676:
3673:
3670:
3667:
3664:
3661:
3658:
3655:
3652:
3649:
3646:
3643:
3640:
3637:
3634:
3631:
3628:
3625:
3622:
3619:
3616:
3613:
3610:
3607:
3604:
3601:
3598:
3595:
3592:
3589:
3586:
3583:
3580:
3577:
3574:
3571:
3568:
3565:
3562:
3559:
3556:
3553:
3550:
3547:
3544:
3541:
3538:
3535:
3532:
3529:
3526:
3523:
3520:
3517:
3514:
3511:
3508:
3505:
3502:
3499:
3496:
3493:
3490:
3487:
3484:
3481:
3478:
3475:
3472:
3462:
3458:
3450:
3447:to with another
3446:
3442:
3438:
3434:
3430:
3426:
3422:
3418:
3414:
3410:
3404:
3400:
3396:
3388:
3384:
3380:
3376:
3372:
3368:
3364:
3360:
3356:
3349:
3346:
3343:
3342:# write the word
3340:
3337:
3334:
3331:
3328:
3325:
3322:
3319:
3316:
3313:
3310:
3307:
3304:
3301:
3298:
3295:
3292:
3289:
3286:
3283:
3280:
3277:
3274:
3271:
3268:
3265:
3262:
3259:
3256:
3253:
3250:
3247:
3244:
3241:
3238:
3235:
3232:
3229:
3226:
3219:
3215:
3200:
3197:
3194:
3191:
3188:
3185:
3182:
3179:
3176:
3169:
3165:
3161:
3157:
3153:
3141:
3137:
3129:
3122:
3119:
3116:
3113:
3110:
3107:
3104:
3101:
3094:
3078:
3075:
3072:
3069:
3066:
3063:
3060:
3057:
3054:
3051:
3048:
3045:
3042:
3039:
3036:
3033:
3030:
3027:
3024:
3021:
3018:
3017:"ABCD"
3015:
3012:
3009:
3006:
3003:
3000:
2997:
2994:
2991:
2988:
2985:
2982:
2979:
2976:
2973:
2970:
2967:
2964:
2947:
2944:
2941:
2938:
2935:
2932:
2929:
2926:
2923:
2920:
2917:
2914:
2911:
2908:
2905:
2902:
2899:
2896:
2841:
2838:
2835:
2832:
2829:
2814:
2810:
2806:
2802:
2798:
2794:
2790:
2786:
2776:
2773:
2770:
2767:
2764:
2761:
2758:
2755:
2752:
2749:
2746:
2743:
2733:
2725:
2721:
2717:
2710:
2707:
2697:
2689:
2685:
2681:
2674:
2671:
2668:
2665:
2662:
2659:
2656:
2653:
2650:
2647:
2644:
2641:
2638:
2635:
2632:
2629:
2619:
2616:
2613:
2610:
2607:
2604:
2601:
2598:
2595:
2592:
2589:
2586:
2583:
2580:
2577:
2574:
2571:
2568:
2565:
2555:
2552:
2549:
2546:
2543:
2540:
2537:
2534:
2531:
2528:
2525:
2522:
2519:
2516:
2513:
2510:
2507:
2504:
2501:
2498:
2495:
2492:
2489:
2486:
2483:
2480:
2477:
2474:
2471:
2468:
2465:
2462:
2459:
2456:
2453:
2421:collection types
2410:
2403:
2400:
2397:
2394:
2391:
2388:
2385:
2382:
2379:
2368:
2364:
2360:
2356:
2352:
2345:
2342:
2339:
2336:
2333:
2330:
2327:
2324:
2321:
2318:
2315:
2312:
2309:
2302:
2298:
2288:
2285:
2282:
2279:
2276:
2273:
2270:
2267:
2264:
2261:
2258:
2247:
2244:
2241:
2238:
2235:
2232:
2229:
2226:
2223:
2220:
2217:
2214:
2207:
2200:
2197:
2194:
2191:
2188:
2185:
2182:
2179:
2176:
2173:
2170:
2167:
2164:
2161:
2158:
2155:
2152:
2149:
2146:
2143:
2140:
2137:
2134:
2131:
2128:
2125:
2122:
2119:
2116:
2113:
2110:
2107:
2104:
2101:
2098:
2091:
2083:
2080:
2077:
2074:
2071:
2068:
2065:
2062:
2059:
2056:
2053:
2050:
2047:
2044:
2041:
2038:
2031:
2024:
2021:
2018:
2015:
2012:
2009:
2006:
2003:
2000:
1997:
1994:
1991:
1988:
1985:
1982:
1979:
1972:
1965:
1961:
1957:
1954:This code calls
1950:
1947:
1944:
1941:
1938:
1935:
1932:
1929:
1926:
1923:
1920:
1917:
1914:
1911:
1908:
1905:
1902:
1899:
1896:
1893:
1886:
1882:
1868:
1865:
1862:
1859:
1856:
1853:
1850:
1847:
1844:
1841:
1838:
1835:
1832:
1829:
1826:
1823:
1820:
1810:
1807:
1804:
1801:
1798:
1795:
1792:
1782:
1779:
1776:
1773:
1770:
1767:
1764:
1761:
1758:
1755:
1752:
1741:
1734:
1731:
1728:
1725:
1722:
1719:
1716:
1713:
1710:
1707:
1704:
1701:
1698:
1695:
1692:
1689:
1686:
1683:
1680:
1677:
1674:
1671:
1668:
1661:
1654:
1651:
1648:
1645:
1642:
1639:
1636:
1633:
1630:
1627:
1624:
1621:
1614:
1610:
1606:
1601:
1597:
1589:
1586:
1583:
1580:
1577:
1574:
1571:
1568:
1565:
1562:
1559:
1556:
1553:
1550:
1547:
1540:
1525:
1521:
1517:
1513:
1509:
1506:after that. The
1505:
1501:
1497:
1490:
1487:
1484:
1481:
1478:
1475:
1472:
1469:
1466:
1463:
1460:
1457:
1454:
1451:
1448:
1445:
1442:
1439:
1436:
1433:
1430:
1424:. For instance:
1423:
1418:
1413:
1406:
1402:
1398:
1394:
1390:
1386:
1379:
1376:
1373:
1370:
1367:
1364:
1361:
1358:
1355:
1352:
1349:
1346:
1343:
1340:
1337:
1330:
1326:
1322:
1318:
1314:
1293:
1277:
1273:
1269:
1261:
1257:
1253:
1246:
1243:
1240:
1237:
1234:
1231:
1228:
1225:
1222:
1219:
1216:
1213:
1210:
1207:
1204:
1201:
1198:
1195:
1192:
1189:
1182:
1174:
1159:
1155:
1147:
1143:
1139:
1132:
1129:
1126:
1123:
1120:
1117:
1110:
1106:
1102:
1098:
1094:
1090:
1086:
1082:
1078:
1073:
1072:
1069:
1066:
1063:
1060:
1057:
1054:
1051:
1048:
1039:distributed cost
1036:
1029:
1026:
1023:
1020:
1017:
1014:
1011:
1008:
1005:
1002:
999:
996:
993:
990:
987:
984:
981:
978:
975:
972:
969:
966:
963:
960:
957:
954:
946:
931:
927:
923:
919:
915:
911:
907:
904:call fails, the
903:
896:
893:
890:
887:
884:
873:
870:
867:
864:
861:
858:
855:
852:
849:
846:
839:
835:
831:
827:
820:
817:
814:
811:
808:
805:
802:
799:
796:
793:
790:
787:
784:
781:
778:
771:
767:
763:
755:
751:
747:
743:
739:
735:
731:
711:
704:
700:
696:
689:
686:
683:
680:
677:
674:
671:
668:
665:
662:
659:
656:
653:
650:
647:
644:
641:
638:
635:
632:
629:
626:
623:
620:
617:
610:
603:
602:
599:
596:
593:
590:
587:
584:
581:
576:
575:
572:
569:
566:
563:
560:
557:
554:
525:
522:
519:
516:
513:
510:
507:
504:
501:
498:
491:
472:
468:
464:
174:
171:
169:
167:
165:
137:
135:
130:
112:
110:
105:
88:Designed by
55:
48:
44:
34:Icon (computing)
21:
4778:
4777:
4773:
4772:
4771:
4769:
4768:
4767:
4723:
4722:
4662:
4661:
4658:
4627:
4604:
4547:SIGPLAN Notices
4538:
4520:
4515:
4507:
4503:
4495:
4484:
4476:
4457:
4449:
4445:
4437:
4428:
4420:
4416:
4401:
4394:
4389:. 27 June 2023.
4381:
4380:
4376:
4368:
4353:
4345:
4341:
4333:
4329:
4321:
4317:
4309:
4305:
4297:
4293:
4285:
4281:
4273:
4260:
4256:, pp. 346.
4252:
4248:
4244:, pp. 629.
4240:
4236:
4232:, pp. 609.
4228:
4224:
4220:, pp. 608.
4216:
4212:
4208:, pp. 606.
4204:
4200:
4196:, pp. 602.
4192:
4188:
4180:
4176:
4166:
4164:
4153:
4149:
4134:
4133:
4129:
4112:
4108:
4104:
4099:
4094:
4093:
4088:
4084:
4067:
4063:
4054:
4050:
4045:
4033:
4025:c === &null
4005:
4004:
4001:
3998:
3995:
3992:
3989:
3986:
3983:
3980:
3977:
3974:
3971:
3968:
3965:
3950:
3949:
3946:
3943:
3940:
3937:
3934:
3931:
3928:
3925:
3922:
3919:
3916:
3913:
3910:
3907:
3904:
3901:
3898:
3895:
3881:
3876:
3875:
3872:
3869:
3866:
3863:
3860:
3857:
3854:
3851:
3848:
3845:
3842:
3839:
3836:
3833:
3830:
3827:
3824:
3821:
3818:
3815:
3812:
3809:
3806:
3803:
3800:
3797:
3794:
3791:
3788:
3785:
3782:
3779:
3776:
3773:
3770:
3767:
3764:
3761:
3758:
3755:
3752:
3749:
3746:
3743:
3740:
3737:
3734:
3731:
3728:
3725:
3722:
3719:
3716:
3713:
3710:
3707:
3704:
3701:
3698:
3695:
3692:
3689:
3686:
3683:
3680:
3677:
3674:
3671:
3668:
3665:
3662:
3659:
3656:
3653:
3650:
3647:
3644:
3641:
3638:
3636:"Dec"
3635:
3632:
3630:"Nov"
3629:
3626:
3624:"Oct"
3623:
3620:
3618:"Sep"
3617:
3614:
3612:"Aug"
3611:
3608:
3606:"Jul"
3605:
3602:
3600:"Jun"
3599:
3596:
3594:"May"
3593:
3590:
3588:"Apr"
3587:
3584:
3582:"Mar"
3581:
3578:
3576:"Feb"
3575:
3572:
3570:"Jan"
3569:
3566:
3563:
3560:
3557:
3554:
3551:
3548:
3545:
3542:
3539:
3536:
3533:
3530:
3527:
3524:
3521:
3518:
3515:
3512:
3509:
3506:
3503:
3500:
3497:
3494:
3491:
3488:
3485:
3482:
3479:
3476:
3473:
3470:
3351:
3350:
3347:
3344:
3341:
3338:
3335:
3332:
3329:
3326:
3323:
3320:
3317:
3314:
3311:
3308:
3305:
3302:
3299:
3296:
3293:
3290:
3287:
3284:
3281:
3278:
3275:
3272:
3269:
3266:
3263:
3260:
3257:
3254:
3251:
3248:
3245:
3242:
3239:
3236:
3233:
3230:
3227:
3224:
3210:
3209:
3208:subject=, pos=
3204:would produce:
3202:
3201:
3198:
3195:
3192:
3189:
3186:
3183:
3180:
3177:
3174:
3124:
3123:
3120:
3118:"the"
3117:
3114:
3111:
3108:
3105:
3102:
3099:
3085:
3083:String scanning
3080:
3079:
3076:
3073:
3070:
3067:
3064:
3061:
3058:
3055:
3052:
3049:
3046:
3043:
3040:
3037:
3034:
3031:
3028:
3025:
3022:
3019:
3016:
3013:
3010:
3007:
3004:
3001:
2998:
2995:
2992:
2989:
2986:
2983:
2980:
2978:"123"
2977:
2974:
2971:
2969:"abc"
2968:
2965:
2962:
2949:
2948:
2946:"iki"
2945:
2942:
2939:
2936:
2933:
2930:
2927:
2924:
2921:
2918:
2915:
2912:
2909:
2906:
2903:
2900:
2897:
2894:
2887:
2883:
2879:
2875:
2871:
2867:
2863:
2859:
2856:the characters
2843:
2842:
2839:
2836:
2833:
2830:
2827:
2821:
2778:
2777:
2774:
2771:
2768:
2765:
2762:
2759:
2756:
2753:
2750:
2747:
2744:
2741:
2712:
2711:
2708:
2705:
2676:
2675:
2672:
2669:
2666:
2663:
2660:
2657:
2654:
2651:
2648:
2645:
2642:
2639:
2636:
2633:
2630:
2627:
2621:
2620:
2617:
2614:
2611:
2608:
2605:
2602:
2599:
2596:
2593:
2590:
2587:
2584:
2581:
2578:
2575:
2572:
2569:
2566:
2563:
2557:
2556:
2553:
2550:
2547:
2544:
2541:
2538:
2535:
2532:
2529:
2526:
2523:
2520:
2517:
2514:
2511:
2508:
2505:
2502:
2499:
2496:
2493:
2490:
2487:
2484:
2481:
2478:
2475:
2472:
2469:
2466:
2463:
2460:
2457:
2454:
2451:
2417:
2405:
2404:
2401:
2398:
2395:
2392:
2389:
2386:
2383:
2380:
2377:
2347:
2346:
2343:
2340:
2337:
2334:
2331:
2328:
2325:
2322:
2319:
2316:
2313:
2310:
2307:
2290:
2289:
2286:
2283:
2280:
2278:"the"
2277:
2274:
2271:
2268:
2265:
2262:
2259:
2256:
2249:
2248:
2245:
2242:
2239:
2237:"the"
2236:
2233:
2230:
2227:
2224:
2221:
2218:
2215:
2212:
2202:
2201:
2198:
2195:
2192:
2189:
2186:
2183:
2180:
2177:
2175:"the"
2174:
2171:
2168:
2165:
2162:
2159:
2156:
2153:
2150:
2147:
2144:
2141:
2138:
2135:
2132:
2129:
2126:
2123:
2121:"the"
2120:
2117:
2114:
2111:
2108:
2105:
2102:
2099:
2096:
2085:
2084:
2081:
2078:
2075:
2072:
2069:
2066:
2063:
2060:
2057:
2054:
2051:
2049:"the"
2048:
2045:
2042:
2039:
2036:
2026:
2025:
2022:
2019:
2016:
2013:
2010:
2007:
2004:
2002:"the"
2001:
1998:
1995:
1992:
1989:
1986:
1983:
1980:
1977:
1952:
1951:
1948:
1945:
1942:
1939:
1936:
1933:
1930:
1927:
1924:
1921:
1918:
1915:
1912:
1909:
1906:
1903:
1900:
1897:
1894:
1891:
1870:
1869:
1866:
1863:
1860:
1857:
1854:
1851:
1848:
1845:
1842:
1839:
1836:
1833:
1830:
1827:
1824:
1821:
1818:
1812:
1811:
1808:
1805:
1802:
1799:
1796:
1793:
1790:
1784:
1783:
1780:
1777:
1774:
1771:
1768:
1765:
1762:
1759:
1756:
1753:
1750:
1736:
1735:
1732:
1729:
1726:
1723:
1720:
1717:
1714:
1711:
1708:
1705:
1702:
1699:
1696:
1693:
1690:
1687:
1684:
1681:
1678:
1675:
1672:
1669:
1666:
1656:
1655:
1652:
1649:
1646:
1643:
1640:
1637:
1634:
1631:
1628:
1625:
1622:
1619:
1607:fails, and the
1591:
1590:
1587:
1584:
1581:
1578:
1575:
1572:
1569:
1566:
1563:
1560:
1557:
1554:
1551:
1548:
1545:
1492:
1491:
1488:
1485:
1482:
1479:
1476:
1473:
1470:
1467:
1464:
1461:
1458:
1455:
1452:
1449:
1446:
1443:
1440:
1437:
1434:
1431:
1428:
1381:
1380:
1377:
1374:
1371:
1368:
1365:
1362:
1359:
1356:
1353:
1350:
1347:
1344:
1341:
1338:
1335:
1306:result sequence
1288:
1274:indicates that
1248:
1247:
1244:
1241:
1238:
1235:
1232:
1229:
1226:
1223:
1220:
1217:
1214:
1211:
1208:
1205:
1202:
1199:
1196:
1193:
1190:
1187:
1134:
1133:
1130:
1127:
1124:
1121:
1118:
1115:
1070:
1067:
1064:
1061:
1058:
1055:
1052:
1049:
1046:
1031:
1030:
1027:
1024:
1021:
1018:
1015:
1012:
1009:
1006:
1003:
1000:
997:
994:
991:
988:
985:
982:
979:
976:
973:
970:
967:
964:
961:
958:
955:
952:
948:one might see:
898:
897:
894:
891:
888:
885:
882:
875:
874:
871:
868:
865:
862:
859:
856:
853:
850:
847:
844:
822:
821:
818:
815:
812:
809:
806:
803:
800:
797:
794:
791:
788:
785:
782:
779:
776:
740:s the value of
705:and continues.
691:
690:
687:
684:
681:
678:
675:
672:
669:
666:
663:
660:
657:
654:
651:
648:
645:
642:
639:
636:
633:
630:
627:
624:
621:
618:
615:
600:
597:
594:
591:
588:
585:
582:
579:
573:
570:
567:
564:
561:
558:
555:
552:
540:runtime systems
532:
527:
526:
523:
520:
517:
514:
511:
508:
505:
502:
499:
496:
443:
438:
372:
360:virtual machine
321:
316:
300:object-oriented
181:implementations
162:
138:
133:
131:
128:
108:
106:
103:
72:, text-oriented
41:
28:
23:
22:
15:
12:
11:
5:
4776:
4766:
4765:
4760:
4755:
4750:
4745:
4740:
4735:
4721:
4720:
4711:
4701:
4687:
4677:
4668:
4657:
4656:External links
4654:
4653:
4652:
4639:
4625:
4597:
4584:
4571:
4542:
4536:
4519:
4516:
4514:
4513:
4511:, p. 128.
4501:
4482:
4455:
4443:
4441:, p. 2.1.
4426:
4414:
4392:
4374:
4351:
4339:
4327:
4315:
4313:, p. xvi.
4303:
4291:
4289:, p. 350.
4279:
4258:
4246:
4234:
4222:
4210:
4198:
4186:
4174:
4147:
4127:
4105:
4103:
4100:
4098:
4095:
4092:
4091:
4082:
4061:
4047:
4046:
4044:
4041:
4040:
4039:
4032:
4029:
3964:
3894:
3880:
3877:
3469:
3223:
3207:
3173:
3098:
3084:
3081:
2961:
2937:"ia"
2928:"Wi"
2893:
2885:
2881:
2877:
2873:
2869:
2865:
2861:
2857:
2826:
2820:
2817:
2740:
2704:
2692:standard input
2626:
2562:
2450:
2416:
2413:
2376:
2306:
2255:
2211:
2095:
2035:
1976:
1890:
1817:
1789:
1749:
1665:
1626:"y="
1618:
1579:"y="
1544:
1526:. This allows
1427:
1334:
1287:
1284:
1186:
1114:
951:
881:
843:
775:
614:
531:
528:
495:
442:
439:
437:
434:
421:
420:
417:
414:
371:
368:
320:
317:
315:
312:
259:after leaving
257:Ralph Griswold
248:typically use
236:
235:
224:
223:
219:
218:
208:
207:
203:
202:
196:
195:
189:
188:
184:
183:
176:
175:
160:
156:
155:
150:
144:
143:
140:
139:
126:
124:
122:Stable release
118:
117:
114:
113:
100:
96:
95:
93:Ralph Griswold
90:
84:
83:
78:
74:
73:
66:multi-paradigm
63:
57:
56:
43:
42:
26:
9:
6:
4:
3:
2:
4775:
4764:
4761:
4759:
4756:
4754:
4751:
4749:
4746:
4744:
4741:
4739:
4736:
4734:
4731:
4730:
4728:
4719:
4715:
4712:
4709:
4705:
4702:
4699:
4695:
4691:
4688:
4685:
4681:
4678:
4676:
4672:
4669:
4665:
4660:
4659:
4649:
4645:
4640:
4636:
4632:
4628:
4626:9781450304054
4622:
4618:
4614:
4610:
4603:
4598:
4594:
4590:
4585:
4581:
4577:
4572:
4568:
4564:
4560:
4556:
4552:
4548:
4543:
4539:
4537:1-57398-001-3
4533:
4529:
4528:
4522:
4521:
4510:
4505:
4499:, p. 76.
4498:
4493:
4491:
4489:
4487:
4480:, p. 75.
4479:
4474:
4472:
4470:
4468:
4466:
4464:
4462:
4460:
4452:
4451:Griswold 1996
4447:
4440:
4439:Griswold 1996
4435:
4433:
4431:
4424:, p. 73.
4423:
4418:
4410:
4406:
4399:
4397:
4388:
4384:
4378:
4372:, p. 74.
4371:
4366:
4364:
4362:
4360:
4358:
4356:
4348:
4343:
4336:
4331:
4325:, p. 10.
4324:
4319:
4312:
4307:
4301:, p. xv.
4300:
4295:
4288:
4283:
4277:, p. 53.
4276:
4271:
4269:
4267:
4265:
4263:
4255:
4250:
4243:
4242:Griswold 1981
4238:
4231:
4230:Griswold 1981
4226:
4219:
4218:Griswold 1981
4214:
4207:
4206:Griswold 1981
4202:
4195:
4194:Griswold 1981
4190:
4183:
4182:Griswold 1981
4178:
4162:
4158:
4151:
4143:
4142:
4137:
4131:
4123:
4122:
4117:
4110:
4106:
4086:
4075:
4065:
4058:
4052:
4048:
4038:
4035:
4034:
4028:
3962:
3958:
3892:
3885:
3765:" "
3729:" "
3690:" "
3684:# Match a day
3467:
3464:
3452:
3406:
3392:
3221:
3205:
3171:
3148:
3146:
3133:
3096:
3090:
2959:
2957:
2952:
2919:"a"
2910:"k"
2901:"W"
2891:
2890:For example,
2888:
2855:
2851:
2846:
2824:
2816:
2781:
2738:
2735:
2729:
2728:Array slicing
2702:
2699:
2693:
2624:
2560:
2448:
2446:
2442:
2438:
2434:
2430:
2426:
2422:
2412:
2374:
2372:
2304:
2293:
2253:
2209:
2093:
2033:
1974:
1967:
1888:
1878:
1875:Likewise the
1873:
1815:
1787:
1747:
1745:
1663:
1616:
1542:
1536:
1531:
1529:
1498:and ending a
1425:
1419:
1408:
1332:
1309:
1307:
1303:
1302:
1297:
1283:
1281:
1265:
1184:
1178:
1170:
1166:
1161:
1151:
1112:
1107:is less than
1042:
1040:
949:
942:
937:
935:
916:performs the
879:
841:
773:
759:
727:
722:
720:
719:boolean logic
715:
706:
612:
605:
549:
545:
541:
537:
536:magic numbers
493:
486:
483:
479:
474:
460:
456:
452:
448:
433:
431:
427:
418:
415:
412:
411:
410:
406:
404:
400:
396:
392:
388:
383:
381:
377:
367:
365:
361:
357:
352:
350:
346:
341:
336:
334:
333:Markov chains
330:
326:
323:The original
311:
309:
305:
301:
296:
294:
289:
284:
282:
278:
274:
270:
266:
262:
258:
253:
251:
250:boolean logic
246:
242:
234:
230:
225:
220:
217:
213:
209:
206:Influenced by
204:
201:
197:
194:
190:
185:
182:
177:
173:
161:
157:
154:
151:
149:
145:
141:
125:
123:
119:
115:
101:
97:
94:
91:
89:
85:
82:
79:
75:
71:
67:
64:
62:
58:
54:
49:
39:
35:
30:
29:
19:
18:Icon language
4647:
4608:
4592:
4579:
4575:
4553:(3): 53–68.
4550:
4546:
4526:
4518:Bibliography
4504:
4453:, p. 1.
4446:
4417:
4408:
4387:MDN Web Docs
4386:
4377:
4349:, p. 4.
4342:
4337:, p. 1.
4330:
4318:
4306:
4294:
4287:Shapiro 1985
4282:
4254:Shapiro 1985
4249:
4237:
4225:
4213:
4201:
4189:
4177:
4165:. Retrieved
4160:
4150:
4139:
4130:
4119:
4109:
4085:
4073:
4064:
4051:
4006:
3959:
3951:
3889:write(f(-1))
3886:
3882:
3465:
3453:
3407:
3390:
3352:
3214:&subject
3211:
3203:
3164:&subject
3156:&subject
3149:
3131:
3125:
3088:
3086:
3056:""
2953:
2950:
2889:
2853:
2847:
2844:
2822:
2805:&letters
2782:
2779:
2736:
2713:
2700:
2677:
2622:
2558:
2444:
2418:
2409:someFunction
2406:
2387:someFunction
2348:
2335:someFunction
2294:
2291:
2250:
2203:
2086:
2027:
1968:
1953:
1876:
1874:
1871:
1813:
1785:
1743:
1737:
1657:
1592:
1534:
1532:
1493:
1409:
1397:write(f(-1))
1391:will return
1382:
1310:
1305:
1300:
1295:
1289:
1268:i := 10
1266:. Replacing
1249:
1176:
1168:
1165:backtracking
1164:
1162:
1149:
1135:
1043:
1032:
938:
933:
928:. Likewise,
899:
876:
823:
723:
707:
692:
606:
533:
487:
480:(as well as
475:
444:
441:Basic syntax
422:
407:
384:
373:
353:
337:
322:
298:Icon is not
297:
285:
254:
240:
239:
3843:&digits
3807:matchdigits
3738:matchdigits
3312:' '
3285:' '
2809:&digits
2718:generator;
2696:!&input
2415:Collections
1296:immediately
1264:side effect
756:to cause a
736:, and then
500:doSomething
395:punch cards
349:Project MAC
4727:Categories
4497:Tratt 2010
4478:Tratt 2010
4422:Tratt 2010
4370:Tratt 2010
4167:9 February
4097:References
3908:additional
3879:Criticisms
3377:can. Thus
2801:&lcase
2797:&ucase
2684:&input
2652:&input
2445:structures
2423:including
1960:x % 2
1887:operator:
1535:alternator
1301:generators
1286:Generators
1272:i <- 10
1175:, and the
1171:operator,
1087:calls its
544:JavaScript
449:-class of
426:Xerox PARC
310:language.
231:, Goaldi,
222:Influenced
187:Icon, Jcon
134:2024-01-17
70:structured
38:de: iCon-L
4102:Citations
4057:Smalltalk
4037:Coroutine
4017:&null
4013:&null
3966:procedure
3804:procedure
3525:procedure
3471:procedure
3429:&fail
3399:&fail
3371:&fail
2371:Smalltalk
1528:iterators
1520:i <= j
1508:suspend i
1504:&fail
1429:procedure
1393:&fail
1336:procedure
1325:&fail
1280:atomicity
1181:<->
1099:performs
1035:try/catch
1013:Exception
941:exception
926:&fail
834:&fail
830:&fail
497:procedure
467:procedure
329:Bell Labs
261:Bell Labs
61:Paradigms
4635:14588067
4136:"Goaldi"
4074:required
4031:See also
3445:&pos
3425:&pos
3417:&pos
3413:&pos
3397:returns
3387:&pos
3383:&pos
3367:&pos
3363:&pos
3359:&pos
3218:&pos
3168:&pos
3160:&pos
3089:scanning
1383:Calling
1292:5 > x
1239:inString
772:ing it:
580:position
553:position
490:function
436:Language
403:ALGOL 60
340:IBM 7090
227:Unicon,
193:Dialects
168:.arizona
4409:Try MTS
4072:is not
3819:suspend
3648:suspend
3549:initial
3145:hoisted
3132:subject
3130:as the
2854:between
2819:Strings
2769:symbols
2760:symbols
2742:symbols
2169:indexOf
2115:indexOf
2090:indexOf
2043:indexOf
1996:indexOf
1971:indexOf
1516:i +:= 1
1468:suspend
1412:suspend
1321:suspend
1233:pattern
592:indexOf
565:indexOf
518:aString
506:aString
387:FORTRAN
314:History
288:strings
214:, SL5,
159:Website
153:dynamic
132: (
107: (
4675:GitHub
4633:
4623:
4567:861936
4565:
4534:
4141:GitHub
4121:GitHub
3792:retval
3714:months
3654:retval
3561:months
3543:static
3537:static
3423:moves
3393:zero,
2956:lvalue
2943:==>
2934:==>
2925:==>
2916:==>
2907:==>
2898:==>
2807:, and
2437:tables
2433:queues
2429:stacks
1744:ad hoc
1422:return
1417:static
1369:return
1317:return
1150:per se
826:read()
730:read()
631:OUTPUT
482:SNOBOL
459:Pascal
399:blocks
356:GE 645
325:SNOBOL
319:SNOBOL
308:Python
304:Unicon
281:Pascal
265:SNOBOL
229:Python
212:SNOBOL
200:Unicon
179:Major
81:SNOBOL
77:Family
4631:S2CID
4605:(PDF)
4563:S2CID
4043:Notes
3987:write
3938:write
3911:lines
3867:&
3858:<=
3849:&
3786:&
3756:&
3705:match
3666:match
3657:<-
3645:every
3540:dates
3528:Mdate
3501:Mdate
3495:write
3330:write
3246:while
3190:write
3106:write
3071:value
3032:value
2993:value
2850:slice
2828:write
2748:table
2694:, so
2680:write
2670:lines
2661:write
2658:every
2643:lines
2634:every
2628:lines
2612:lines
2600:write
2597:while
2582:lines
2573:while
2564:lines
2539:write
2524:lines
2509:while
2491:lines
2461:while
2452:lines
2425:lists
2381:write
2378:every
2367:every
2363:every
2359:while
2355:while
2351:every
2329:write
2308:every
2301:while
2297:every
2260:write
2257:every
2225:write
2222:every
2151:write
2133:while
2073:write
2014:write
1940:write
1919:&
1892:every
1881:&
1858:write
1819:every
1794:write
1791:every
1772:write
1751:every
1724:write
1667:every
1620:write
1609:write
1573:write
1456:<=
1450:while
1405:write
1389:f(-1)
1270:with
1206:&
1173:<-
1116:write
1062:write
1007:catch
989:write
959:while
930:while
910:while
906:write
886:write
883:while
863:write
845:while
807:write
777:while
770:write
754:write
738:write
542:; in
512:write
447:ALGOL
391:COBOL
273:ALGOL
243:is a
216:ALGOL
172:/icon
4671:Icon
4648:Byte
4621:ISBN
4532:ISBN
4169:2012
4070:fail
4068:The
4021:if c
3981:then
3969:main
3837:many
3675:days
3555:days
3546:days
3474:main
3461:upto
3459:and
3457:many
3441:many
3437:upto
3433:many
3409:many
3336:word
3306:upto
3294:word
3279:many
3216:and
3158:and
3150:The
3136:find
3112:find
2716:list
2706:aCat
2688:read
2637:push
2588:read
2576:push
2545:line
2512:line
2497:line
2485:push
2470:read
2464:line
2441:sets
2431:and
2353:and
2295:The
2272:find
2269:<
2231:find
2206:find
1964:ItoJ
1956:ItoJ
1901:ItoJ
1846:<
1647:>
1600:then
1596:<
1570:then
1552:<
1524:fail
1486:fail
1432:ItoJ
1385:f(5)
1363:then
1357:>
1319:and
1313:fail
1256:find
1227:find
1224:<
1138:<
1125:<
1101:then
1093:else
1089:then
1081:<
1077:<
1059:then
1053:<
971:read
945:read
922:else
918:then
902:read
892:read
854:read
789:read
762:read
746:read
710:GOTO
703:LOOP
682:LOOP
628:LOOP
609:fail
471:main
389:and
293:Perl
241:Icon
170:.edu
109:1977
102:1977
46:Icon
4716:on
4673:on
4613:doi
4555:doi
4078:end
4002:end
3873:end
3831:tab
3798:end
3771:pos
3699:tab
3660:tab
3516:end
3449:tab
3421:tab
3403:not
3395:pos
3391:not
3379:pos
3375:pos
3355:pos
3300:tab
3273:tab
3252:pos
3249:not
3065:has
3062:now
3026:has
3023:now
2987:has
2984:now
2606:pop
2591:())
2518:pop
1885:and
1489:end
1477:+:=
1378:end
1329:end
1242:)))
1103:if
980:EOF
974:())
953:try
895:())
838:EOF
798:EOF
792:())
766:EOF
688:END
524:end
457:or
279:or
166:.cs
164:www
4729::
4706:,
4692:,
4682:,
4646:.
4629:.
4619:.
4607:.
4591:.
4578:.
4561:.
4551:23
4549:.
4485:^
4458:^
4429:^
4407:.
4395:^
4385:.
4354:^
4261:^
4159:.
4138:.
4118:.
3975:if
3972:()
3920::=
3902:10
3899::=
3846:))
3828::=
3732:||
3720:||
3717:))
3693:||
3681:||
3678:))
3564::=
3558::=
3531:()
3504:()
3483::=
3477:()
3463:.
3419:.
3297::=
3288:))
3264:do
3228::=
3178::=
3162:;
3121:))
3074:of
3053::=
3044::=
3035:of
3014::=
3005::=
2996:of
2975::=
2966::=
2882:−1
2878:−2
2874:−3
2815:.
2803:,
2799:,
2793:--
2789:**
2785:++
2772::=
2763::=
2745::=
2726:.
2709::=
2631::=
2615:))
2567::=
2530:do
2515::=
2476:do
2473:()
2467::=
2455::=
2435:,
2402:))
2396:to
2357:;
2344:))
2326:do
2320:to
2314::=
2287:))
2246:))
2216::=
2196:);
2160:);
2139:!=
2130:);
2082:);
2070:);
2023:);
2011:);
1937:do
1931:==
1913:10
1898::=
1879:,
1855:do
1825::=
1806:10
1803:to
1769:do
1763:to
1757::=
1740:to
1721:do
1715:23
1709:11
1703:10
1673::=
1660:or
1613:or
1605:if
1546:if
1539:or
1462:do
1407:.
1351:if
1315:,
1215::=
1200:10
1197::=
1179:,
1160:.
1097:if
1085:if
1047:if
998:);
977:!=
962:((
936:.
914:if
860:do
857:()
851::=
832:.
816:);
795:!=
780:((
695:LE
655:LE
473:.
463::=
283:.
233:jq
68::
4700:.
4637:.
4615::
4595:.
4569:.
4557::
4540:.
4411:.
4171:.
4144:.
4124:.
4009:c
3999:}
3996:)
3990:(
3984:{
3978:c
3954:x
3947:)
3944:x
3941:(
3935:)
3932:1
3929:-
3926:(
3923:f
3917:x
3914:)
3905:(
3896:x
3870:v
3864:)
3861:n
3855:v
3852:*
3840:(
3834:(
3825:v
3822:(
3816:)
3813:n
3810:(
3783:)
3780:)
3777:0
3774:(
3768:|
3762:=
3759:(
3753:)
3747:)
3744:2
3741:(
3726:=
3711:!
3708:(
3702:(
3687:=
3672:!
3669:(
3663:(
3651:(
3642:}
3639:]
3633:,
3627:,
3621:,
3615:,
3609:,
3603:,
3597:,
3591:,
3585:,
3579:,
3573:,
3567:[
3552:{
3513:)
3507:|
3498:(
3492:?
3489:s
3480:s
3348:}
3345:}
3339:)
3333:(
3324:)
3321:0
3318:|
3315:)
3309:(
3303:(
3282:(
3276:(
3267:{
3261:)
3258:0
3255:(
3240:{
3237:?
3234:s
3225:s
3199:)
3193:(
3187:?
3184:s
3175:s
3152:?
3140:?
3128:?
3115:(
3109:(
3103:?
3100:s
3093:?
3068:a
3059:s
3050:s
3041:s
3029:a
3020:s
3011:s
3002:s
2990:a
2981:s
2972:s
2963:s
2886:0
2884:C
2880:B
2876:A
2870:4
2868:C
2866:3
2864:B
2862:2
2860:A
2858:1
2840:)
2834:!
2831:(
2775:2
2766:1
2757:)
2754:0
2751:(
2673:)
2667:!
2664:(
2655:)
2649:!
2646:,
2640:(
2609:(
2603:(
2585:,
2579:(
2554:}
2548:)
2542:(
2533:{
2527:)
2521:(
2506:}
2500:)
2494:,
2488:(
2479:{
2399:j
2393:i
2390:(
2384:(
2341:k
2338:(
2332:(
2323:j
2317:i
2311:k
2284:s
2281:,
2275:(
2266:5
2263:(
2243:s
2240:,
2234:(
2228:(
2213:s
2199:}
2193:1
2190:+
2187:i
2184:,
2181:s
2178:,
2172:(
2166:=
2163:i
2157:i
2154:(
2148:{
2145:1
2142:-
2136:i
2127:s
2124:,
2118:(
2112:=
2109:i
2106:;
2100:=
2097:s
2079:j
2076:(
2067:1
2064:+
2061:i
2058:,
2055:s
2052:,
2046:(
2040:=
2037:j
2030:s
2020:i
2017:(
2008:s
2005:,
1999:(
1993:=
1990:i
1987:;
1981:=
1978:s
1949:)
1946:x
1943:(
1934:0
1928:2
1925:%
1922:x
1916:)
1910:,
1907:0
1904:(
1895:x
1867:)
1864:i
1861:(
1852:)
1849:5
1843:x
1840:|
1834:|
1831:1
1828:(
1822:i
1809:)
1800:1
1797:(
1781:)
1778:k
1775:(
1766:j
1760:i
1754:k
1733:)
1730:i
1727:(
1718:)
1712:|
1706:|
1700:|
1697:5
1694:|
1691:4
1688:|
1685:3
1682:|
1679:1
1676:(
1670:i
1653:)
1650:y
1644:)
1641:5
1638:|
1635:x
1632:(
1629:,
1623:(
1588:)
1585:y
1582:,
1576:(
1567:)
1564:5
1561:|
1558:x
1555:(
1549:y
1512:i
1500:j
1496:i
1483:}
1480:1
1474:i
1471:i
1465:{
1459:j
1453:i
1447:)
1444:j
1441:,
1438:i
1435:(
1401:f
1375:}
1372:1
1366:{
1360:0
1354:x
1348:)
1345:x
1342:(
1339:f
1276:i
1260:i
1252:i
1245:}
1236:,
1230:(
1221:i
1218:(
1212:j
1209:(
1203:)
1194:i
1191:(
1188:{
1146:a
1142:b
1131:)
1128:b
1122:a
1119:(
1109:b
1105:a
1071:)
1065:(
1056:b
1050:a
1028:}
1022:{
1019:)
1016:e
1010:(
1004:}
1001:}
995:a
992:(
986:{
983:)
968:=
965:a
956:{
889:(
872:)
869:a
866:(
848:a
819:}
813:a
810:(
804:{
801:)
786:=
783:a
750:a
742:a
734:a
699:S
685:)
679:(
676:S
673::
670:)
667:5
664:,
661:I
658:(
652:1
649:+
646:I
643:=
640:I
634:=
625:1
622:=
619:I
601:)
595:(
589:.
583:=
574:)
568:(
562:.
556:=
521:)
515:(
509:)
503:(
455:C
277:C
136:)
111:)
40:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.