Clean语言

Clean,在開發期間稱為Concurrent Clean,是純函數式程序设计語言。Clean由荷蘭奈梅亨拉德伯德大学自1987年开始製作和維護[4]

Clean
函数式
設計者奈梅亨拉德伯德大学软件技术研究组
1987年1987
当前版本
  • 3.1 (2022年9月22日;穩定版本)[1]
型態系統强类型, 静态, 动态
操作系统跨平台
許可證简化BSD[2]
文件扩展名.icl, .dcl, .abc
網站clean.cs.ru.nl
啟發語言
Lean, Miranda, Haskell
影響語言
Haskell, Idris[3]

概述

Clean和Haskell有很多相似之處:参照透明性列表推导式守卫垃圾回收高阶函数柯里化惰性求值

Clean是用C寫成的。Clean程式很容易跨平台,在大部分情況下,要轉移到另一個平台只需在那裏重新編譯一次即可,不用改動原始碼。它可運行於WindowsMacintoshSolarisLinux。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介入了更多的语法糖

引用

  1. . [2022年12月19日].
  2. . Clean. [23 July 2019]. (原始内容存档于2019-07-23).
  3. . [2018-11-20]. (原始内容存档于2018-11-21).
  4. . [2021-02-27]. (原始内容存档于2019-05-25).
  5. ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf

外部連結

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.