In computer science, Clean is a general-purpose purely functional computer programming language.
(Store as hello.icl):
Start = "Hello, world!"
fac 0 = 1
fac n = n * fac (n-1)
// find the factorial of 10
Start = fac 10
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
Start = fib 7
(^) infixr 8 :: Int Int -> Int
(^) x 0 = 1
(^) x n = x * x ^ (n-1)
The type declaration states that the function is a right associative infix operator with priority 8: this states that
x*x^(n-1) is equivalent to
x*(x^(n-1)) as opposed to
(x*x)^(n-1); this operator is pre-defined in the Clean standard environment.
How Clean works
Computation is based on graph rewriting
. Constants such as numbers are graphs and functions are graph rewriting formulas. This, combined with compilation to native code, makes Clean programs relatively fast, even with high abstraction.
- Source files (.icl) and project files (.dcl) are converted into Clean's platform-independent bytecode (.abc), implemented in C and Clean.
- Bytecode is converted to object code (.obj) using C.
- object code is linked with other files in the module and the runtime system and converted into a normal executable in Clean.
Earlier Clean system versions were written completely in C, thus avoiding bootstrapping issues.
Clean is available for Microsoft Windows
. It is also available with limited input/output
capabilities and without the "Dynamics" feature for Apple Macintosh
Clean is dual licensed: it is available under the terms of the GNU LGPL, and also under a proprietary license.