Clean語言
Clean,在開發期間稱為Concurrent Clean,是純函數式程序設計語言。Clean由荷蘭的奈梅亨拉德伯德大學自1987年開始製作和維護[4]。
編程範型 | 函數式 |
---|---|
設計者 | 奈梅亨拉德伯德大學軟件技術研究組 |
面市時間 | 1987年 |
當前版本 |
|
型態系統 | 強類型, 靜態, 動態 |
操作系統 | 跨平台 |
許可證 | 簡化BSD[2] |
文件擴展名 | .icl, .dcl, .abc |
網站 | clean |
啟發語言 | |
Lean, Miranda, Haskell | |
影響語言 | |
Haskell, Idris[3] |
概述
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介入了更多的語法糖。
引用
- ^ Clean 3.1 (Stable). [2022年12月19日].
- ^ Download Clean. Clean. [23 July 2019]. (原始內容存檔於2019-07-23).
- ^ "Idris - Uniqueness Types". [2018-11-20]. (原始內容存檔於2018-11-21).
- ^ FAQ - Clean. [2021-02-27]. (原始內容存檔於2019-05-25).
- ^ ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf[失效連結]