Clean,在开发期间称为Concurrent Clean,是纯函数式程序设计语言。Clean由荷兰的奈梅亨拉德伯德大学自1987年开始制作和维护[4]。
概述
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 10
|
fac :: 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 7
|
fibs :: 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,具有一些值得注意的区别:[5]
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介入了更多的语法糖。
引用
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.