Abh*_*kar 15 type-systems programming-languages functional-programming clojure
我一直在学习各种函数式语言,包括Haskell,Scala和Clojure.Haskell有一个非常严格且定义良好的静态类型系统.Scala也是静态类型的.另一方面,Clojure是动态类型的.
所以我的问题是
Sim*_*low 40
语言不需要输入功能 - 函数式编程的核心是lambda演算,它是无类型和类型变体.
类型系统扮演两个角色:
在像Haskell这样的高级类型系统中,类型系统可以提供更多好处:
Nor*_*sey 13
类型系统在函数式语言中扮演什么角色?
对于Simon Marlow的优秀答案,我想补充一个类型系统,特别是包含代数数据类型的系统,可以更容易地编写程序:
面向对象语言中的软件设计有时使用UML图表示,使用类型非常清楚地表达.这种清晰度尤其表现在不仅值具有类型,而且模块具有类型,如在Objective Caml或Standard ML中.
当一个人编写代码时,一些简单的启发式方法可以很容易地根据类型编写纯函数:
case表达式仔细检查代数数据类型的值可以消耗它.基于这些观察,以及简单的规则,除非有充分的理由,函数应该使用它的每个参数,否则很容易减少可以写入极少数候选者的可能代码的空间.例如,没有那么多合理的类型函数(使用Haskell表示法)
forall a . (a -> Bool) -> [a] -> Bool
Run Code Online (Sandbox Code Playgroud)
使用类型创建代码的技术称为类型导向编程. 当它运行良好时,你会听到功能程序员说"一旦我们得到了正确的类型,代码实际上就自己编写了". 由于类型通常比代码小得多,这是一个很大的胜利.
| 归档时间: |
|
| 查看次数: |
3116 次 |
| 最近记录: |