Knowledge

Icon (programming language)

Source 📝

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:)

Index

Icon language
Icon (computing)
de: iCon-L

Paradigms
multi-paradigm
structured
SNOBOL
Designed by
Ralph Griswold
Stable release
Typing discipline
dynamic
www.cs.arizona.edu/icon
implementations
Dialects
Unicon
SNOBOL
ALGOL
Python
jq
very high-level programming language
boolean logic
Ralph Griswold
Bell Labs
SNOBOL
University of Arizona
ALGOL
C
Pascal

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.