zoukankan      html  css  js  c++  java
  • haskell--Learn You a Haskell for Great Good

    1 简单算数

    Prelude> 1 + 2
    3
    Prelude> (1+3)*(2+5)
    28
    Prelude> 5 * (-2)
    -10
    

    2 Boolean 代数

    Prelude> True && False
    False
    Prelude> False || True
    True
    Prelude> not False
    True
    

    3 测试相等

    Prelude> "hello" == "hello"
    True
    Prelude> "a" /= "b"
    True
    Prelude> 1 /= 2
    True
    

    4 函数调用(使用内置函数)

    不需要括号,括号用来改变优先级

    Prelude> succ 100
    101
    Prelude> succ 1
    2
    Prelude> min 1 100
    1
    Prelude> max 1 100
    100
    

    5 函数优先级很高(有限结合)

    Prelude> succ 5 * 10 * 10
    600
    Prelude> succ (5 * 10) * 10
    510
    

    6 使用反引号的中缀函数

    Prelude> div 92 10
    9
    Prelude> 92 `div` 10
    9
    

    7 多次调用同一函数

    调用参数只有一个

    Prelude> succ (succ 110)
    112
    

    8 函数定义

     

    8.1 无参数

    size = 123
    

    8.2 带参数

    add a b = a + b
    

    8.3 没有顺序要求(前面定义的也可以调用后面的函数)

    doubleUs x y = doubleMe x + doubleMe y
    doubleMe x = x + x
    

    9 列表

     

    9.1 ++ 操作符

    λ> [1,2] ++ [1,3]
    [1,2,1,3]
    λ> "ab" ++ "12"
    "ab12"
    

    9.2 :操作符

    λ> 'a':"123"
    "a123"
    λ> 1:[2,1]
    [1,2,1]
    

    9.3 列表语法糖(前面的是语法糖)和本质

    λ> [1,2,3,4]
    [1,2,3,4]
    λ> 1:2:3:4:[]
    [1,2,3,4]
    

    9.4 取下标对应的数据

    λ> "123456" !! 3
    '4'
    

    9.5 列表包含列表

    列表中的同级元素要相似(如:同级元素是列表且元素都是整数,不能有其他类型)

    λ> let a = [[1], [2,3]]
    λ> a
    [[1],[2,3]]
    

    9.6 列表比较

    默认使用字典比较每一个元素

    λ> let a = [10];
    λ> let b = [1, 2];
    λ> a > b
    True
    

    10 操作列表的基本函数

     

    10.1 获取第一个元素

    λ> head [ 2, 1, 3]
    2
    

    10.2 去除首元素

    λ> tail [2, 1, 3]
    [1,3]
    

    10.3 获取最后一个元素

    λ> last [2, 1, 3]
    3
    

    10.4 去除最后一个元素

    λ> init [2, 1, 3]
    [2,1]
    

    10.5 head last init tail 不能作用在空列表上(编译通过,运行发生错误)

    λ> head []
    ** Exception: Prelude.head: empty list
    

    10.6 列表长度

    λ> length [2, 1, 3]
    3
    

    10.7 反转列表

    λ> reverse [1, 1, 3]
    [3,1,1]
    

    10.8 从首元素开始,提取指定个数的元素

    λ> let a = [1, 2, 3, 4, 5]
    λ> take 2 a
    [1,2]
    λ> take 8 a
    [1,2,3,4,5]
    λ> take 0 a
    []
    

    10.9 从首元素开始,删除指定个数的元素

    λ> let a = [2, 1, 5, 4, 3]
    λ> drop 3 a
    [4,3]
    λ> drop 0 a
    [2,1,5,4,3]
    λ> drop 10 a
    []
    

    10.10 获取可以排序的列表的最大最小值

    λ> let a = [1, 3, 2, 5]
    λ> maximum a
    5
    λ> minimum a
    1
    

    10.11 计算列表的总和和乘积

    λ> let a = [0, 1, 2, 3]
    λ> sum a
    6
    λ> product a
    0
    λ> product [2, 3]
    6
    

    10.12 判断是否是列表中的元素

    λ> let a = [1, 2, 3]
    λ> 2 `elem` a
    True
    λ> 10 `elem` a
    False
    

    11 ranges

    数字和字符序列,也可以使用差值

    11.1 简单使用

    λ> [1..10]
    [1,2,3,4,5,6,7,8,9,10]
    λ> [2,5..20]
    [2,5,8,11,14,17,20]
    λ> ['c'..'z']
    "cdefghijklmnopqrstuvwxyz"
    λ> ['c', 'h'..'z']
    "chmrw"
    

    11.2 逆序

    λ> [10, 8..1]
    [10,8,6,4,2]
    

    11.3 获取指定个数的两种方式

    λ> [10, 20..10 * 10]
    [10,20,30,40,50,60,70,80,90,100]
    λ> take 10 [10, 20..]
    [10,20,30,40,50,60,70,80,90,100]
    

    11.4 获取指定个数循环列表内的元素(列表内的元素无限循环)

    λ> take 5 (cycle [1, 2, 3])
    [1,2,3,1,2]
    

    11.5 获取指定个数的单个元素的两种方式(推荐用函数的方式)

    λ> take 10 (repeat 10)
    [10,10,10,10,10,10,10,10,10,10]
    λ> replicate 6 10
    [10,10,10,10,10,10]
    

    12 集合

     

    12.1 一个条件

    λ> [3*x | x <- [1..7]]
    [3,6,9,12,15,18,21]
    

    12.2 多个条件

    12.3 使用余数

    λ> [x | x <- [50..100], x `mod` 7 == 3]
    [52,59,66,73,80,87,94]
    

    12.4 奇数

    是奇数,小于10则xxx,否则xxx

    λ> let str set = [if x < 10 then "odd" else "even" | x <- set, odd x]
    λ> str [6..13]
    ["odd","odd","even","even"]
    

    12.5 多个列表组合

    λ> [x*y|x<-[1..3],y<-[1..3]]
    [1,2,3,2,4,6,3,6,9]
    

    12.6 计算长度

    λ> let len list = sum [1|_<-list]
    λ> len [1..5]
    5
    λ> len [1..8]
    8
    

    12.7 使用字符串

    λ> let filter str = [ch | ch <- str,  ch `elem` ['A'..'Z']]
    λ> filter "Welcome, Hello, World!"
    "WHW"
    

    12.8 嵌套集合

    λ> let xxs = [[1,4..10], [1..10]]
    λ> [[x|x<-xs, odd x, x > 3] | xs<-xxs]
    [[7],[5,7,9]]
    

    Created: 2019-12-20 周五 19:25

    Validate

  • 相关阅读:
    1027 Colors in Mars (20 分)
    1025 PAT Ranking (25 分)
    1024 Palindromic Number (25 分)
    JVM调优之jstack找出最耗cpu的线程并定位代码
    kill -3 获取threaddump信息
    java单例支持高并发
    yum出现的“UnicodeDecodeError: 'ascii' codec”问题解决
    命令行参数
    vyatta常用操作
    mysql5.8安装指南
  • 原文地址:https://www.cnblogs.com/heidekeyi/p/12074758.html
Copyright © 2011-2022 走看看