SNOBOL4
SNOBOL4 (StriNg Oriented and symBOlic Language) is a language for text processing, pattern matching, and much more, first designed and implemented at Bell Telephone Laboratories, Inc. (BTL) in the 1970's.
SNOBOL4, while known primarily as a string language excels at any task involving symbolic manipulations. It provides run time typing, garbage collection, user data types, on the fly compilation. The language has a simple and highly orthogonal syntax, making it easy to learn.
A later implementation, developed by Robert B. K. Dewar and called "SPITBOL", added several major enhancements to the language, which include providing several structured programming type concepts but without requiring traditional keywords. These so-called "SPITBOL extensions" have since been retrofitted into most modern implementations of SNOBOL4 as well.
The use of the code() built-in function (which takes source code as input and returns executable code) combined with user-defined datatypes (implemented using the data() built-in function), provides the ability to rather easily implement many object-oriented techniques, including what are essentially constructors and methods (although this terminology evolved after SNOBOL4 and SPITBOL).
CSnobol4 [ftp://ftp.snobol4.org/snobol sources] and [ftp://ftp.snobol4.org/snobol/win32/ Win32 binary]
Above also included in Rafal M. Sulejman's TkS*LIDE SNOBOL4 IDE [[File:Tkslide.png]]
Tasks
- 100 doors
- A+B
- Ackermann function
- Anagrams
- Arithmetic/Complex
- Arithmetic/Integer
- Array concatenation
- Array length
- Arrays
- Associative array/Creation
- Associative array/Iteration
- Averages/Arithmetic mean
- Averages/Root mean square
- CUSIP
- Case-sensitivity of identifiers
- Character codes
- Comments
- Compound data type
- Conditional structures
- Copy a string
- Count occurrences of a substring
- Create a file
- Create a two-dimensional array at runtime
- Detect division by zero
- Determine if a string is numeric
- Dot product
- Dynamic variable names
- Empty program
- Empty string
- Environment variables
- Ethiopian multiplication
- Even or odd
- Execute a Markov algorithm
- Factorial
- Fibonacci sequence
- FizzBuzz
- Function definition
- Function prototype
- Generic swap
- Greatest element of a list
- HTTP
- Hash from two arrays
- Hello world!
- Hello world/Line printer
- Hello world/Standard error
- Hello world/Text
- Hostname
- IBAN
- Include a file
- Increment a numerical string
- Input loop
- Integer comparison
- Interactive programming
- Knuth shuffle
- Leap year
- Look-and-say sequence
- Loops/Break
- Loops/Downward for
- Loops/For
- Loops/Infinite
- Loops/N plus one half
- Luhn test of credit card numbers
- Memory allocation
- Metaprogramming
- Mutual recursion
- N-queens problem
- Palindrome detection
- Pangram checker
- Primality by trial division
- Program termination
- Range expansion
- Range extraction
- Read a file line by line
- Regular expressions
- Repeat a string
- Reverse a string
- Roman numerals/Decode
- Roman numerals/Encode
- Rot-13
- Run-length encoding
- Runtime evaluation
- Runtime evaluation/In an environment
- Shell one-liner
- Short-circuit evaluation
- Sieve of Eratosthenes
- Sorting algorithms/Bogosort
- Sorting algorithms/Bubble sort
- Sorting algorithms/Insertion sort
- Soundex
- String append
- String case
- String concatenation
- String interpolation (included)
- String length
- String matching
- String prepend
- Strip a set of characters from a string
- Strip whitespace from a string/Top and tail
- Substring
- Substring/Top and tail
- Sum and product of an array
- Sum of squares
- System time
- Take notes on the command line
- Tokenize a string
- Variables