zoukankan      html  css  js  c++  java
  • Haskell学习笔记 Introduction/常用函数

    haskell是个神奇的语言。

    函数式编程,我的理解是它讲所有东西都整成函数来实现。

    比如说循环结构--递归函数

               数据结构--构造函数

       ....

    所以整个程序就是一个个函数套在一起。

    比较有意思的是后面关于functor、monad的升格操作

    还有对于副作用(IO)等的实现

    第一个程序(sum

    sum [] = 0
    sum (n:ns) = n + sum ns
    
    sum [1,2,3]
    = { applying sum }
    1 + sum [2,3]
    = { applying sum }
    1 + (2 + sum [3])
    = { applying sum }
    1 + (2 + (3 + sum []))
    = { applying sum }
    1 + (2 + (3 + 0))
    = { applying + }
    6

    小栗子:快速排序

    qsort :: [Int] -> [Int]
    qsort [] = []
    qsort (x:xs) = qsort ls ++ [x] ++ qsort rs 
                        where 
                            ls = [a | a <- xs , a <=x ]
                            rs = [b | b <- xs , b > x ] 

    一个简洁的不能再简洁的快排

    (不过是O (N^2) 的 

    常用函数

    head 取序列的第一个元素

    head [1,2,3] 

    1

    tail 除去序列第一个元素

    tail [1,2,3] 

    [2,3]

    last 取序列的最后一个元素

    init 取除了最后一个外的所有元素

    (!!) 取出第 n 个

    [1,2,3,4,5] !! 2

    2

    take 取出前 n 个

    take 3 [1,2,3,4,5]

    [1,2,3]

    drop 去除前 n 个

    drop 3 [1,2,3,4,5]

    [4,5]

    length 求序列长度

    ++ 拼接两序列

    reverse 翻转序列

    maximun 返回列表中最大元素

    minimum 返回列表中最小元素

    null 判断是否为空

    filter 过滤

    filter :: (a -> Bool) -> [a] -> [a]

    filter f xs 保留满足 f 的元素

    iterate 迭代

    iterate f x = [x,f x, f (f x) ..]

    ghci> take 10 (iterate (*2) 1)
    [1,2,4,8,16,32,64,128,256,512]

    fst   取二元组的第一个

    snd 取二元组的第二个

    zip 把两个序列连起来(舍去长出来的一段

    zip [1,2,3] ['a','b','c','d']

    [(1,'a'),(2,'b'),(3,'c')]

    其他规则

    1.haskell 中函数调用的优先级最高

    f g x 视作 调用含有两个参数 g 和 x 的函数 f 

    f (g x) 先 g 再 f

  • 相关阅读:
    zookeeper常用命令
    linux查看日志相关命令
    第三十一期: VueRouter源码浅析 传统前端和多媒体前端
    第二十八期:模型,模块,组件,框架和架构
    星际2光速注卵
    星际心得
    英语词根研究和单词记忆
    星际2如何离线模式打电脑和rpg地图练操作
    星际研究
    第一篇帖子:不利用中间变量交换两个数字的小算法题
  • 原文地址:https://www.cnblogs.com/liankewei/p/15559841.html
Copyright © 2011-2022 走看看