• Haskell 笔记 ①


    一切都是函数,包括常量、表达式,格式:名字 参数参数2.. =函数内容

    if语句(else绝对不可以省略)

    F=if (..) then x

      else y

    没有数组,只有列表[1,2,3,4,5], [‘h’,’e’]

      列表有好多运算符:

      “++” :同类型拼接

      “ : “ :前端插入,1:2:3:4:5:[]等效于[1,2,3,4,5],后端插入请用++

      “!!”: 下标索引,从0开始,[1,2,3]!!1=2

      列表是可以嵌套的[[1,2],[3,4]]

      列表是可以比较的[1,2,3]<[1,3]

      列表有一些常用函数,注意这些混乱的名字

      head []:返回首元素

      last []: 返回尾元素

      tail []:返回去除头元素后的列表

      init []:返回去除尾元素后的列表

      null []:检测是否空

      reverse []:反转

      take/drop 5 []:/扔列表前5个元素

      maximum/minimum []: 最值

      sum/product []:和与积

      elem 4 [1,4]: 是否存在,通常中缀形式,即 4 `elem` [1,4]

    列表可以自由推导,最好不要去推导浮点数(精度问题)

      [1..20]就是1~20了,[‘a’..’z’]就是a~z

      只要告诉步长就可以自由推导,如[1,4..11]=[1,4,7,11]

      注意20~1应该这么写[20,19..1],因为默认的等差推导认为d>0

      列表是惰性的。

      [1,4..]尽管是无限的,但却是合法的,你可以take 5 [1,4..]取出前5项,要多少算多少,Lazy

      相关惰性函数(注意格式!!)

      take 5 (cycle [1,2,3]) //生成123循环列表

      take 5 (repeat 5) //生成5循环列表

    万能的列表表达式

      还记得高中学集合时,描述型表示集合么 {x|x<10,x-(N}

      看这个例子[x|x `mod` 3==1,odd x],这个就是给定一堆条件创造的列表,所有条件逗号隔开,且都是逻辑与关系,返回的不仅可以是x, x*y也行,(x,x)也行

     列表表达式可以是函数(Orz

     看这个函数fuck xs=[x|x `mod` 3==1,odd x],调用时fuck [1..10]

    列表表达式可以嵌套

    [ [x|x<-xs]|xs<-xxs] ,当然xxs就得是嵌套列表

    细胞数组?元组!

    (1,”hello”,”a”) ,用C语言来解释原理,就是建了个结构体。

    列表套元组,元组的形式(个数&类型)必须一致,因为列表中的类型必须一致,一个元组就是一个结构体,一种限定的类型

    二元组别称序对,有三个函数fst/snd,取第一/第二元素,zip [1..20] [20..30]zip就是拉链的意思,自动从两个列表中生成[所有序对],长度由最短那个控制

    ⑦关于类型的那点事

    检测类型表达式: “:t” , :t 4==5则输出4==5::BOOL,其中::负责指明类型

    来看下一个完整优美的函数写法

    add::Int->Int->Int->Int(忽略这句也没问题,但是编译器会给警告)

    add x y z = m

    类型声明格式1,2..返回值,中间用箭头连接,表示“函数推导”之意

    常见类型:Int,Char,Bool,Float,Double,Integer(大整数,2333!),String

    虚类型:t head的返回结果是 head::[a]->a, :t fst则是fst::(a,b)->a

    a,b这里都是很敷衍的,告诉编译器类型由元素决定,由于ab不过是临时取的名字

    ⑧类型类(杂糅了好多东西的大类型接口)

    -> (Eq a)与(Ord a)写函数类型时强制前置说明,如果函数里涉及==/=, <>

    比如手艹一个min函数

    min'::(Ord a)=>a->a->a

    min' a b= if(a<b) then a

          else b

    ->有一些功能类型类(Show类型和Read类型)

      函数show:把任意类型值变成字符串,如show Ttrue=”True”

      函数read: 把字符串通过类型推导还原类型,需要借助一个运算来推导类型

      如,Read “[1,2]”+[3]=[1,2,3],直接写Read “[1,2]”是不对的

    ->有一些你看不到(Enum类型)

      还记得列表[1..20]这个列表就是Enum类型了,succ/pred函数查看推导的后继/前驱

    ->有一些专门打辅助(Bounded类型)

      函数minBound::Int, maxBound::Int,检查类型的上下界

    ->普通类型总结一下(Num类型,Floating类型,Integer类型)

      用于限定函数参数的类型

  • 相关阅读:
    90. 子集 II
    274. H 指数
    1291. 顺次数
    StreamWriter 跟BinaryWriter的区别
    非常有用的正则表达式
    linux菜单恢复
    VS2008的诡异问题
    一些常用算法 练手的的代码
    string 类型为空的处理方法
    left jion 的多表连接用法。
  • 原文地址:https://www.cnblogs.com/neopenx/p/4273486.html
Copyright © 2020-2023  润新知