初识Haskell

Posted will-zyq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Haskell相关的知识,希望对你有一定的参考价值。

在COMP30026 Models of Computation中接触了新的编程语言Haskell,一个之前听都没有听过的语言,在此记录关于Haskell的一些最基本概念。


1.Haskell是一个函数式编程语言(functional programming language),函数式编程语言最基本的操作是function application。

2.GHC(the Glasgow Haskell Compiler)是Haskell的编译器,GHCi是Haskell的互动编程环境。

3.官网www.haskell.org,相关下载、文档、教程都在其中。

4.Haskell语言的特点(摘自官网):

  (1) 静态类型statically typed

  在Haskell中所有的表达式(expression)的类型(type)在编译时确定,在function application中的类型必须匹配,不匹配会被编译器拒绝。类型在Haskell中不仅是一种保证形式,也是Haskell对程序构建的表示。

  (2) 纯函数purely functional

  在Haskell中的每一个函数(function)都是数学意义上的函数,即使是副作用(side-effect)的IO操作也只是对纯代码产生的操作的描述。没有语句和指令,只有不能改变(局部或全局)变量和访问如时间和随机数状态的表达式。

  *副作用一般是针对操作(表达式)而言的,一个操作/表达式有“副作用”是指在对该表达式求值时,会改变程序的一个或多个数据,以致再次对该表达式求值时,可能会得出不同的结果。事实上,Java的4种表达式语句如赋值、自增自减、方法调用、对象创建都可能带来副作用。

  (3) 类型推断type inference

  不必在Haskell中明确写出每个类型。类型将通过双向统一每一个类型来推断出。但如果选择写出类型或是要求编译器写出。

  (4) 并发concurrent

  Haskell对效果的明确处理,非常适合并发编程。它的编译器GHC带有高性能并行垃圾收集器和轻量级并发库,其中包含许多有用的并发原语和抽象。

  (5) 惰性lazy

  函数不检测其参数,这意味程序可以很好地通过普通函数和控制结构(如if/else)来组合在一起。Haskell代码的纯粹使得功能链更容易融合在一起,从而取得性能优势。

  (6) 包packages

  Haskell的开源贡献非常活跃,公共包服务器上提供了范围非常广的包。

  

以上是关于初识Haskell的主要内容,如果未能解决你的问题,请参考以下文章

ROS+CPP初识

初识UmiJS

初识 HTML5 Video Blob

初识数据库 初识mysql

Dapr初识

初识Kendo