haskell - 函数式语言的显着特征

标签 haskell f# functional-programming erlang clojure

众所周知,所有函数式语言都共享一些基本属性,例如将函数用作程序的基本构建 block ,并具有所有后果,例如使用递归而不是迭代。但是,也存在一些根本性差异。 Lisp 对 Lisp 代码和数据使用单一表示,而 ML 没有 ML 代码的标准表示。 Erlang 有一个内置的基于actor的并发。 Haskell 有单子(monad)。 Haskell 在静态类型系统中区分了纯函数和不纯函数;机器学习没有。

有什么特色基本 其他函数式语言(Clojure、F#、Arc 等)之间的区别?基本我的意思是影响你用这种语言开发方式的东西,而不是例如它是否与一些广泛传播的运行时集成。

最佳答案

在我的头顶上:

  • lazy vs. eager (又名非严格与严格或按需调用与按值调用):函数参数是在函数应用之前、之后还是从不评估?
  • pure vs. impure : 语言允许函数有副作用吗?它有可变引用吗?
  • static vs. dynamic :语言在编译时或运行时检查类型吗?
  • algebraic datatypes :语言是否支持变体类型的模式匹配?
  • metaprogramming : 该语言是否提供强大的代码生成系统?
  • concurrencyparallelism :线程/进程是一流的抽象吗?该语言是否可以轻松地同时运行多个计算?
  • “异国情调”类型:静态类型系统的表现力如何? GADT?依赖类型?线性类型? F系统?

  • 只有前两项是函数式语言真正独有的(即,几乎所有命令式语言都是急切的和不纯的)。

    关于haskell - 函数式语言的显着特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/485418/

    相关文章:

    haskell - 在决定一棵树是否完整时,“方程具有不同数量的参数”

    caching - 如何使用 Y-combinator 为这个函数获取缓存

    generics - 保持部分应用的函数通用

    f# - 是否可以在 F# 类型提供程序中使用数组作为静态参数?

    f# - if-then 语句的功能替代是什么?

    algorithm - 有什么有效的方法可以将一元数转换为二进制数?

    haskell - 为什么 Data.Tree.Tree 没有幺半群实例?

    Haskell 并行性中的惰性求值

    haskell - 返回类型丢失 IO

    javascript - 在 Javascript 中声明此对象上的方法时如何正确引用对象上设置的方法?