捣鼓Haskell
最近想学这门语言,于是做了一些准备工作,配置好一切后,打算玩一玩。
先扔一段官方简介:
Introduction
Haskell is a computer programming language. In particular, it is a polymorphically statically typed, lazy, purely 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的更多相关文章
- 好久没发贴了,最近捣鼓了个基于node的图片压缩小网站解析。
看了下,距离上次发帖都是去年10月份的事,忙于工作的我很少跑博客园里面来玩了. 做这个小网站的初衷是 https://tinypng.com/ 这个网站有时候访问很慢,然后自己去研究了下图片压缩. 网 ...
- 捣鼓TinyMCE粘贴图片并上传+Flask后台
好久没有编程了,最近需要完成一个小功能,为了方便,需要粘贴图片后上传到后台.前台编辑器用tinymce(N年前用过,我也就知道这个编辑器而已.这次使用下来感觉文档更丰富了),后台我用的Flask.昨天 ...
- WSL捣鼓记——图形化(以emacs为例)
前言 这学期开始学习linux,但笔记本装了双系统之后指纹识别会失效,开虚拟机又十分占据内存,于是乎基本需要使用linux的时候就用wsl,可奈何只有命令行界面,在需要使用图形软件(如emacs)的时 ...
- 捣鼓FileZilla
今天突然对ftp服务器感兴趣,于是随意打了一个ftp词条,发现了FZ官网,好奇点进去下载了之后,捣鼓了一会.于是,也写一个小教程记录一下吧,害怕自己以后忘记怎么弄的了. 首先需要用到两个,一个是FZ ...
- mysql存储过程出参入参,sqlserver很熟悉的一件事到mysql,捣鼓了大半天。记录一下提醒自己。勿看
create PROCEDURE myTestProcname(in score int ,out result varchar(100))BEGINIF score>60 THENset re ...
- 捣鼓一个Ajax请求管理器
随着前端技术的不断发展,现在做的项目里很多页面里都会有大量的ajax请求,随之而来就有了一些问题: 1.没必要的ajax请求怎么处理? 2.ajax链式调用怎么维护? ajax链式调用最原始的写法: ...
- 瞎捣鼓的code highlight
int a ; int b; public int a ;int b char c; h2 { text-align: left;}.postTitle{ background-color:#F ...
- mysql 乱码问题的捣鼓
mysql在ubuntu的终端下出现中文乱码的问题: 先学着在不改数据库的情况下对my.cnf配置文件进行修改, 主要的是设置 default-character-set=utf8 但是设置完后数据库 ...
- 捣鼓TinyMCE 粘贴图片并上传+Django后台
前面一篇写了上传到Flask后台,但是我不熟悉Flask,原先想学习一下,据说是轻量级. 但是我发现,学习会浪费我大量的时间,因为我并不是以这个为生的,我的目标只是要完成功能,让我自己能尽早使用起来, ...
随机推荐
- 方便的 IcoMoon 图标字体
官网地址:https://icomoon.io/app/#/select 已发现的方便之处: 1.官网已提供大量常用图标字体: 2.可通过 svg 将其转换为 图标字体: 3.不仅可转换,还可自定义编 ...
- socketserver 模块简介
一.socketserver模块简介 socketserver模块简化了网络编程,模块下有五个服务类:BaseServer.TCPServer.UDPServer.UnixStreamServer.U ...
- What Is A Airless Pump Bottle?
What is an airless pump bottle?Unlike conventional dispensers that use a tube or suction tube to dra ...
- Python MySQLdb中执行SQL语句传入的参数应该要加上引号如果该字段是str类型的
如下图: username在表中是字符串类型的,所以传入的参数要加上引号
- 4500-X启动到“511K bytes of non-volatile configuration memory”,无法继续?
在设备做了某些配置后,尤其是升级,重启设备后,发现设备在如下界面卡住,无法进一步进入CLI命令行. Platform Manager: starting in standalone mode (act ...
- Linux内核5.6亮点
导读 当我们还在体验 Linux 5.5 稳定发行版带来更好的硬件支持时,Linux 5.6 已经来了.我将在本文中重点介绍 Linux 5.6 发布版中值得期待的关键更改和功能. 说实话,Linux ...
- 安装ubuntu18.04.3全过程
目录 一.安装ubuntu18.04.3操作系统 二.系统设置 三.非开发常用软件安装 四.开发常用软件安装 五.ubuntu相关知识 六.参考文章链接 正文 一.安装ubuntu18.04.3操作系 ...
- Anniversary party POJ - 2342
题目链接 经典的树形dp,最大独立集,对于每个点就有2个状态,选/不选 设\(dp_{i,0}\)表示不选第i个,\(dp_{i,1}\)表示选第i个,容易得到其状态转移 \(dp_{i,0} = \ ...
- 「NOIP2016」蚯蚓
传送门 Luogu 解题思路 很容易想到用一个堆去维护,但是复杂度是 \(O((n+m)\log(n+m))\) 的,显然过不了 \(7e6\). 其实这题有一个性质: 先被切开的蚯蚓,得到的两条新蚯 ...
- 【知识学习】PHP实现批量替换字典后缀
<?php //要打开字典的物理路径 $filename = 'E:\Local Test\WWW\password.txt'; $handle = fopen($filename,'r') o ...