《Haskell趣学指南》笔记之基本语法

栏目: 编程语言 · 发布时间: 5年前

  • Haskell 是纯函数式的(不能赋值,引用透明)
  • Haskell 是 lazy 的
  • Haskell 是静态类型的
  • Haskell 支持类型推导
  • :l myfunctions 可以加载同目录的 myfunctions.hs,且可以重复执行
  • :set prompt "ghci> " 可以改 prompt
    :set prompt "\ESC[0;37m%s\n\ESC[1;91mλ \ESC[m"
    
  • putStrLn 可以打印出中文字符串

第 1 章

  • 5 * -3 要写成 5 * (-3) ,不然报错
  • 布尔用 True 和 False
  • 1 + '1' 会报错, 5 + 0.4 不报错,因为 5 也可以被看作 5.0

函数

  • Haskell 中有一些中缀函数,如 * 和 +
    • 只要以特殊字符命名函数,即可自动将它视为中缀函数。 Miran Lipovaca. Haskell趣学指南(异步图书) (新锐编程语言集萃) (p. 111). 人民邮电出版社. Kindle 版本.
  • Haskell 大部分属于前缀函数,如
    succ 8
    min 1 2
    max 1 2
    div 9 3
    
  • 函数调用的优先级最高, succ 9 * 10 等价与 (succ 9) * 10
  • 后缀可以变中缀: div 9 3 可以改成 9 `div` 3
  • 单参数函数 doubleMe x = x + x
  • 双参数函数 doubleUs x y = x * 2 + y * 2
  • 函数定义没有先后顺序的概念
  • 条件语句 if <condition> then <exp> else <exp> 不能省略 else
  • 条件语句是表达式而不是语句,总是有返回值
  • 函数名可以包含 ' 字符,一般以 ' 结尾的函数是非惰性求值版本,也叫严格求值
  • 函数名不能以大写字母开头,因为大写字母开头的是类型
  • 没有参数的函数被称为定义或者名字,如 a = 1

列表

  • 列表是单类型 homogeneous 的数据结构,只能存储类型相同的元素,不能储存类型不同的元素
  • a = [1,2,3]
  • 使用 ++ 可以拼接两个列表,但是它会遍历第一个列表
  • "hello"['h','e','l','l','o'] 的语法糖
  • 使用 Cons 运算符 : 可以在列表头部插入一个元素 1:[2,3]
  • [1,2]1:2:[] 的语法糖
  • 按索引获取值可以用 !! 符号: [1,2,3] !! 0 值为 1,索引越界会报错
  • [3, 2, 1] > [2, 1, 0] 值为 True
  • 更多列表操作: head/tail/last/init/length/null/reverse/task 3/drop 3/maximum/minimum/sum/product求积
    《Haskell趣学指南》笔记之基本语法
  • head [] 报错
  • 4 `elem` [3,4,5] 值为 True
  • [1..20] 生成 1 到 20 这 20 个数字组成的列表
  • ['a'..'z'] / ['K'..'Z']
  • [2,4..20] 生成 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
  • [20..1] 会得到空列表,应该写成 [20,19..1]
  • take 24 [13, 26..]
  • cycle [1, 2, 3] 会对列表进行无限循环,得到 1,2,3,1,2,3,1,2,3... 组成的列表
  • repeat 5 会得到由 5 组成的无限列表
  • repeat 3 10 会得到 [10,10,10]

列表推导式

  • [x* 2 | x <- [1.. 10]] 得到 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
  • [x* 2 | x <- [1.. 10], x>5, filter2, filter3] 可以对 x 进行过滤
  • [ x* y | x <-[1, 3, 5], y <- [2, 4, 6]] 得到长度为 9 的列表 [2,4,6,6,12,18,10,20,30]
  • [ x* y | x <-[1, 3, 5], y <- [2, 4, 6], x* y > 10] 得到 [12,18,20,30]
  • length' xs = sum [1 | _ <- xs] 可以使用这个 length' 函数求列表的长度
  • 还能嵌套:
    ghci> xxs = [[1, 3, 5, 2, 3, 1, 2, 4, 5],[ 1, 2, 3, 4, 5, 6, 7, 8, 9],[ 1, 2, 4, 2, 1, 6, 3, 1, 3, 2, 3, 6]]
    ghci> [ [ x | x <- xs, even x ] | xs <- xxs]
    [[2, 2, 4],[ 2, 4, 6, 8],[ 2, 4, 2, 6, 2, 6]]
    复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ActionScript 3.0 Cookbook

ActionScript 3.0 Cookbook

Joey Lott、Darron Schall、Keith Peters / Adobe Dev Library / 2006-10-11 / GBP 28.50

Well before Ajax and Microsoft's Windows Presentation Foundation hit the scene, Macromedia offered the first method for building web pages with the responsiveness and functionality of desktop programs......一起来看看 《ActionScript 3.0 Cookbook》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具