Curry:一种函数式逻辑编程语言
Curry
PAKCS KiCS2 Curry2Go Curr(y)gle Packages
Downloads
Curry
一种真正集成的函数式逻辑编程语言 Downloads Try It!
[](https://curry-lang.org/<#cb1-1>)-- Returns the last number of a list.
[](https://curry-lang.org/<#cb1-2>)last :: [Int] -> Int
[](https://curry-lang.org/<#cb1-3>)last (_ ++ [x]) = x
[](https://curry-lang.org/<#cb1-4>)
[](https://curry-lang.org/<#cb1-5>)-- Returns some permutation of a list.
[](https://curry-lang.org/<#cb1-6>)perm :: [a] -> [a]
[](https://curry-lang.org/<#cb1-7>)perm [] = []
[](https://curry-lang.org/<#cb1-8>)perm (x:xs) = insert (perm xs)
[](https://curry-lang.org/<#cb1-9>) where insert ys = x : ys
[](https://curry-lang.org/<#cb1-10>) insert (y:ys) = y : insert ys
Curry 是一种声明式多范式编程语言,它以无缝的方式结合了函数式编程(嵌套表达式、高阶函数、强类型、惰性求值)和逻辑编程(非确定性、内置搜索、自由变量、部分数据结构)的特性。与单一编程范式相比,Curry 提供了额外的功能,例如面向逻辑计算的最佳求值以及具有用户定义函数的灵活的非确定性模式匹配。
特性
纯粹声明式
Curry 被称为声明式语言,因为计算结果独立于求值的时间和顺序,这简化了对程序进行推理。副作用可以建模为“IO”操作,即对要做什么的声明性描述。操作仅由表达式构成,没有语句或指令,并且对变量的每个绑定都是不可变的。 Learn More
类型推断
Curry 是强类型的,但程序员不需要编写函数的类型注释:它们由编译器使用类型推断算法自动推断。然而,写下函数的类型是一种好的风格,以便至少提供对函数预期用途的最小文档。 Learn More
非确定性
Curry 支持非确定性操作,这些操作可以为相同的输入返回不同的值。非确定性操作支持类似于逻辑编程的编程风格,同时保留了函数式程序的一些优势,例如表达式嵌套和惰性(按需驱动)求值。 Learn More
自由变量
自由变量表示“未知”值。它们被实例化(即,被某些具体值替换),以便可以评估实例化的表达式。Curry 系统的 REPL 显示了它已计算以评估表达式的主表达式的自由变量的绑定(即,实例化)。 Learn More Curry 的开发是一项国际倡议,旨在为集成函数式逻辑语言的研究、教学和应用提供一个通用平台。Curry 的设计主要在 Curry 邮件列表中讨论。 还可以获得描述该语言的详细报告。 要了解 Curry 的概念,您可以查看 Curry 功能的简短列表或 Curry 教程。 Curry Report Features Tutorial Mailing List
生态系统
编译器
Curry 的几种实现可用和/或正在开发中。 最突出的代表是 Portland Aachen Kiel Curry System (PAKCS)、新版本的 Kiel Curry System (KiCS2) 和 Münster Curry Compiler (MCC)。 Learn More
包管理器
Curry Package Manager (CPM) 是一种用于分发和安装 Curry 库和应用程序以及管理它们之间的版本依赖关系的工具。 这些库组织在包中。 有一个中心索引,其中包含所有这些包,CPM 可以轻松下载。 Learn More
CurryDoc
CurryDoc 是一种以 HTML(以及可选的 LaTeX)格式生成 Curry 程序文档的工具。 生成的 HTML 页面包含有关模块导出的所有数据类型和操作的信息,以及不同实体之间的链接。 Learn More
Curr(y)gle API 搜索
Curr(y)gle 是一个 Curry API 搜索引擎,允许您搜索 CPM 索引的 Curry 库。 您可以按操作、数据类型和模块的名称进行搜索。 它的设计遵循 Haskell 的搜索引擎 Hoogle 设置的示例。 Learn More