最近想学这门语言,于是做了一些准备工作,配置好一切后,打算玩一玩。

  先扔一段官方简介:

Introduction

Haskell is a computer programming language. In particular, it is a polymorphically statically typedlazypurely functional language, quite different from most other programming languages. The language is named for Haskell Brooks Curry, whose work in mathematical logic serves as a foundation for functional languages. Haskell is based on the lambda calculus, hence the lambda we use as a logo.

  Haskell 的好处(google翻译):

  • 大大提高了程序员的工作效率(爱立信在使用电话软件的一组实验中使用Erlang,一种类似于Haskell的函数式编程语言测量了9到25之间的改进因子)。
  • 更短,更清晰,更易维护的代码。
  • 更少的错误,更高的可靠性。
  • 程序员和语言之间较小的“语义鸿沟”。
  • 交货时间更短。

Haskell是一种广泛的语言,适用于各种应用程序。它特别适用于需要高度可修改和可维护的程序。

软件产品的许多生命都花在规范, 设计维护上,而不是编程中。函数式语言对于编写可以实际执行(因此经过测试和调试)的规范而言是极好的。这样的规范最终程序的第一个原型。

程序也相对容易维护,因为代码更短,更清晰,副作用的严格控制消除了一大类无法预料的交互。

  从上面了解介绍到Haskell是一种函数式语言,那么什么是函数式语言?了解函数式语言前,我先了解一点lambda演算函数式编程的历史。

  然后通过前面的一些资料,大概了解到函数式编程与以往C/Java等语言的最大不同之处在于,后者是命令式语言,他们必须按照指令一条一条的执行,一个程序中每一条指令都是不可缺少的。所以函数式编程是一种非冯诺依曼体系结构的编程方式。比较命令式,函数式更符合人的行为,函数式程序代码很直观,他们就像简明的数学表达式一样。

  显然C++/python等的lambda表达式就是函数式的语法。

  然后,一点自己体验GHCI命令行界面的记录:

按 ctrl + L 是清屏;
按 ctrl + I 显示506个操作/运算命令符?(display all 506 possibilities)
按 ctrl + J 等于按回车键;
按 ctrl + R 可以通过输入字符/字串匹配查找键入过的命令中出现过的输入字符/字串的命令;
按 ctrl + S 与上一个类似;
按 ctrl + P 可以向前查找键入过的命令;
按 ctrl + D 删除当前光标位置上的字符,如果没有字符且使用该命令前键入的是其他不显示命令(比如退格键、其他ctrl命令),则退出GHCI;
按 ctrl + A 将光标移动到字符串的第一个字符上;
按 ctrl + E 将光标移动到最后一个字符后面;
按 ctrl + F 是将光标往后移动一个字符;
按 ctrl + K 是删除当前光标位置上及之后的所有字符
按 ctrl + W 删除当前光标位置以前的字符直到有一个空格停止;
按 ctrl + T 可交换当前光标位置上的字符与光标位置前一个字符的位置,交换后光标位置不变,如果光标在字符串后,则交换光标前两个字符之间的位置;
按 ctrl + C 可退出GHCI,也可换行。 键入 ‘:quit’ 退出GHCI。 键入命令 ‘:?’ ro ‘:help’ 可以查看一些命令。

  最后,给一个示例:

捣鼓Haskell的更多相关文章

  1. 好久没发贴了,最近捣鼓了个基于node的图片压缩小网站解析。

    看了下,距离上次发帖都是去年10月份的事,忙于工作的我很少跑博客园里面来玩了. 做这个小网站的初衷是 https://tinypng.com/ 这个网站有时候访问很慢,然后自己去研究了下图片压缩. 网 ...

  2. 捣鼓TinyMCE粘贴图片并上传+Flask后台

    好久没有编程了,最近需要完成一个小功能,为了方便,需要粘贴图片后上传到后台.前台编辑器用tinymce(N年前用过,我也就知道这个编辑器而已.这次使用下来感觉文档更丰富了),后台我用的Flask.昨天 ...

  3. WSL捣鼓记——图形化(以emacs为例)

    前言 这学期开始学习linux,但笔记本装了双系统之后指纹识别会失效,开虚拟机又十分占据内存,于是乎基本需要使用linux的时候就用wsl,可奈何只有命令行界面,在需要使用图形软件(如emacs)的时 ...

  4. 捣鼓FileZilla

    今天突然对ftp服务器感兴趣,于是随意打了一个ftp词条,发现了FZ官网,好奇点进去下载了之后,捣鼓了一会.于是,也写一个小教程记录一下吧,害怕自己以后忘记怎么弄的了. 首先需要用到两个,一个是FZ ...

  5. mysql存储过程出参入参,sqlserver很熟悉的一件事到mysql,捣鼓了大半天。记录一下提醒自己。勿看

    create PROCEDURE myTestProcname(in score int ,out result varchar(100))BEGINIF score>60 THENset re ...

  6. 捣鼓一个Ajax请求管理器

    随着前端技术的不断发展,现在做的项目里很多页面里都会有大量的ajax请求,随之而来就有了一些问题: 1.没必要的ajax请求怎么处理? 2.ajax链式调用怎么维护? ajax链式调用最原始的写法: ...

  7. 瞎捣鼓的code highlight

    int a ; int b; public int  a ;int b   char c; h2 { text-align: left;}.postTitle{ background-color:#F ...

  8. mysql 乱码问题的捣鼓

    mysql在ubuntu的终端下出现中文乱码的问题: 先学着在不改数据库的情况下对my.cnf配置文件进行修改, 主要的是设置 default-character-set=utf8 但是设置完后数据库 ...

  9. 捣鼓TinyMCE 粘贴图片并上传+Django后台

    前面一篇写了上传到Flask后台,但是我不熟悉Flask,原先想学习一下,据说是轻量级. 但是我发现,学习会浪费我大量的时间,因为我并不是以这个为生的,我的目标只是要完成功能,让我自己能尽早使用起来, ...

随机推荐

  1. laravel执行数据库迁移的过程中出现Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Operation timed out (SQL: select * from information_schema.tables where table_schema = shop and table_name = migrations

    向customers表添加字段phone php artisan make:migration add_phone_to_customers_table 问题: 解决方法: 将DB_HOST配置项修改 ...

  2. stream.js

    <script src='stream-min.js'></script> 下载 stream.js 2Kb minified streams是什么? Streams 是一个操 ...

  3. Python中的bool类型

    Python 布尔类型 bool python 中布尔值使用常量True 和 False来表示:注意大小写 比较运算符< > == 等返回的类型就是bool类型:布尔类型通常在 if 和 ...

  4. dateadd()日期加法运算

  5. QBImagePickerController 不可选择照片流中照片

    因为QBImagePickerController使用的ALAssetsLibrary方式来读取图片,如果采用默认方式去执行,那么根据url读取到的asset会为空,这时候我们就 需要特殊处理 [se ...

  6. 《记一次Linux被入侵全过程》阅读笔记

    此前从未了解过关于网络安全相关方面的内容,仅仅知道安全性是软件必不可少的质量属性之一,而由于自己所做项目对安全性需求基本为无,所以很少对此进行关注.今天看到作者系统被入侵的经验,于是点开来读,以积累他 ...

  7. 算法复习 : 插入排序原理,记忆,时间复杂度 (7行java实现)

    最近啃了一遍吴伟民老师的<数据结构>,记录一些心得. 一种简洁的插入排序 : 1.重要概念 : 哨兵 1.在我们要排序的数组中,哨兵做为一个辅助的位置,一般是0下标的槽位做为哨兵 2.哨兵 ...

  8. SpringBoot 配置 Redis 多缓存名(不同缓存名缓存失效时间不同)

    import com.google.common.collect.ImmutableMap; import org.springframework.cache.CacheManager; import ...

  9. C:gcc的基本使用

    分布编译 预处理:gcc -E hello.c -o hello.i 编 译:gcc -S hello.i -o hello.s 汇 编:gcc -c hello.s -o hello.o 链 接:g ...

  10. 如何查看Ubuntu系统版本

    在Ubuntu终端,常用以下几种方式查看系统版本: 一.uname -a 二.cat /etc/issue 三.cat /etc/lsb-release 四.lsb_release -a 五.cat ...