Clean语言

Clean，在開發期間稱為Concurrent Clean，是純函數式程序设计語言。Clean由荷蘭的拉德堡德大学自1987年开始製作和維護。

概述
Clean和Haskell有很多相似之處：、列表推导式、守卫、垃圾回收、高阶函数、柯里化和惰性求值。

Clean是用C寫成的。Clean程式很容易跨平台，在大部分情況下，要轉移到另一個平台只需在那裏重新編譯一次即可，不用改動原始碼。它可運行於Windows，Macintosh，Solaris和Linux。Clean具有叫做“ITasks”的面向任务编程工具箱。

例子 
一个在屏幕上打印"Hello World!"的程序：

module hello

Start :: String
Start = "Hello, world!"

第一行module hello，告訴編譯器這個模組（或一個project的部份）叫“hello”。除非你改變了這一行，否則它必須儲存於一個叫hello.icl的檔案。之後的一行，Start :: String，表示這個變數Start的type是String。最後一行表示這個變數是“Hello, world!”。因為這裏無指定用GUI，所以這句“Hello, world!”會顯示在控制台（console）之中。

阶乘:
fac :: Int -> Int
fac 0 = 1
fac n = n * fac (n-1)

Start = fac 10fac :: Int -> Int
fac n = prod [1..n] // The product of the numbers 1 to n

Start = fac 10
斐波那契数列：
fib :: Int -> Int
fib 0 = 1
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1) 

Start = fib 7fibs :: Int Int -> [Int]
fibs x_2 x_1 = [x_2:fibs x_1 (x_2 + x_1)]

fib :: Int -> Int
fib n = (fibs 1 1) !! n

Start = fib 7
中缀算子：
(^) infixr 8 :: Int Int -> Int
(^) x 0 = 1
(^) x n = x * x ^ (n-1)
类型声明声称了这个函数是右结合中缀算子，具有优先级8：这声称了x*x^(n-1)等价于x*(x^(n-1))而不是(x*x)^(n-1)。这个算子预定义于Clean标准库StdEnv中。

比较于Haskell

语法区别
Clean的语法非常类似于Haskell，具有一些值得注意的区别：ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
 Haskell Clean 评论 [ x | x <- [1..10] , isOdd x] [ x \\ x <- [1..10] | isOdd x] 列表推导式 x:xs [x:xs] cons算子 data Tree a
  = Empty
  | Node (Tree a) a (Tree a) :: Tree a
  = Empty
  | Node (Tree a) a (Tree a) 代数数据类型 (Eq a, Eq b) => ... ... | Eq a & Eq b 类断言和上下文 fun t@(Node l x r) = ... fun t=:(Node l x r) = ... as模式 if x > 10 then 10 else x if (x > 10) 10 x if
一般而言，Haskell比Clean介入了更多的语法糖。

引用

 外部連結 
Clean主頁

Category:函数式编程语言