" 把它...">
美文网首页程序员
Haskell大法好1

Haskell大法好1

作者: _proto_麻瓜一袁 | 来源:发表于2017-07-23 23:42 被阅读44次
    1. 终端输入<code>ghci</code>开始魔幻之旅。

    2. 为了美观起见,更改指令显示 <code>:set prompt "ghci> "</code> 把它改成 ghci>

    3. 第一个外部文件:
      先新建文件baby.hs,然后在里面输入我们的函数:

    doubleMe x = x + x
    

    然后用命令<code>:l baby.hs</code> 进行加载,加载完成后会有提示。
    然后我们再输入以下代码测试。

    doubleMe 5
    

    发现返回为10(即之前定义函数的返回值)。

    1. if/then/else
      haskell的条件判断与其他语言稍有不同,由于设计原因,所有的东西都应该有返回,所以我们不能省略then和else。具体结构如下
    if 条件 then 满足if的表达式 else 不满足的if的表达式
    test x = if x>100 then x else x*2
    
    1. list
      list数据结构用来存储多个类型相同的元素
      ghci下 可以用let 声明常量
    let x=[1,2,3]
    let y=[1,2,3]
    x++y  // [1,2,3,1,2,3]
    

    利用<code>:</code>可以实现对list的插入

    5:[1,2,3] //[5,1,2,3]
    [1,2,3]:5 //error
    

    使用 <code>!!</code> 运算符,按照索引取得 List 中的元素

    [1,2,3]!!2 //3
    

    last的head/last/tail/init等操作

    ghci>head [1,2,3]
    1
    ghci>last [1,2,3]
    3
    ghci>tail [1,2,3]
    [2,3]
    ghci>init [1,2,3]
    [1,2]
    ghci>length  [1,2,3]
    3
    ghci>null [1,2,3]
    False
    ghci>null []
    True
    ghci>reverse [1,2,3]
    [3,2,1]
    ghci>take 0 [1,2,3]
    []
    ghci>take 1 [1,2,3]
    [1]
    ghci>take 2 [1,2,3]
    [1,2]
    ghci>take 5 [1,2,3]
    [1,2,3]
    ghci>maximum [1,2,3]
    3
    ghci>minimum [1,2,3]
    1
    ghci>sum [1,2,3]
    6
    ghci>1 `elem` [1,2,3]
    True
    ghci>0 `elem` [1,2,3]
    False
    

    关于list结构如下:


    list结构

    6.range

    ghci>[1..5]
    [1,2,3,4,5]
    ghci>[2,4..5]
    [2,4]
    ghci>[10,20..50]
    [10,20,30,40,50]
    ghci>[3,6..12]
    [3,6,9,12]
    

    7.<code>:t xxx</code>来做类型判断

    ghci>:t "a"
    "a" :: [Char]
    ghci>:t 1
    1 :: Num t => t
    ghci>:t doubleMe
    doubleMe :: Num a => a -> a
    

    8.数据类型

    Int 表示整数。对 32 位的机器而言,上限一般是 2147483647,下限是 -2147483648。

    Integer 表示整数,但它是无界的

    Float 表示单精度的浮点数。

    Double 表示双精度的浮点数。

    Bool 表示布尔值,它只有两种值:True 和 False。

    Char 表示一个字符。一个字符由单引号括起,一组字符的 List 即为字符串。

    Tuple 的类型取决于它的长度及其中项的类型。注意,空 Tuple 同样也是个类型,它只有一种值:()。

    9.杂记
    函数优先级 > 乘法优先级
    函数复合(顺序从右到左) 比如:A->B->C 表示 A->(B->C)
    兰姆达表达式:
    \n => 2*n+1

    Prelude> map (\n->2*n+1) [1..5]
    [3,5,7,9,11]
    

    == 表示相等
    /= 表示不相等
    输出使用putStrLn

    Prelude> putStrLn("11111"++"\n"++"22222"++"\n"++"3333333")
    11111
    22222
    3333333
    

    相关文章

      网友评论

        本文标题:Haskell大法好1

        本文链接:https://www.haomeiwen.com/subject/gmndfxtx.html