Haskell入门(一): 逻辑运算,list,tuple等

python入门编程, 之后用c++学习数据结构,Haskell萌新。

参考教材:Learn You a Haskell for Great Good (http://learnyouahaskell.com/)

操作环境:Ubuntu下Linux64位虚拟机


Chapter1部分内容

逻辑运算

    逻辑值 Boolean value: True, False

    逻辑运算符 Boolean operator: &&, ||, not

    判断相等和不等 Equality and inequality: ==, /= 

    运算优先级priority () > 函数调用function call > 其它数学运算others

    If...then...else

        Haskell要求有 if 必须有else。

List

    Haskell的list类似于c++里的数组(array), 必须是相同类型的元素(homogeneous),使用[ ] 包围。

    列表属性:

        length a(list) 获取元素个数

        null a(list) 判断是否是空list。

    元素添加:

        a(list) ++ b(list):遍历a后将b加在尾部。

        a(element): b(list) : 将a加在b的开头。

        a(element) `elem` b(list)    判断a是不是b中的元素。

        以上二者中后者在元素多时据说更高效。可能是类似链表的结构?

    元素获取:

        a(list) !! b(index)  利用下标获取。从0开始计算下标。python 和 c++里的[ ]

        head a(list) 获取第一个元素。

        tail a(list) 返回除去第一个元素后的list。

        last a(list) 获取最后一个元素。

        init a(list) 获取除去最后一个元素后的list。

        take a(int) b(list) 从b中获取前a个元素组成的list,不足则返回整个list

        drop a(int) b(list) 从b中获取去除前a个元素后余下的list, 不足则返回空list。

    多个list

        小list可以组成大list,但是同样要求不同list的元素类型相同。

        list比较参考字符串比较规则。

    其它操作:

        reverse/sum/product/maximum/minimum a(list) 倒置, 求积, 求和, 求最大元素, 求最小元素

        replicate a(element) b(int) 将a重复b次构成list。

        cycle a(list), repeat a(element)  获取由a构成的list

Range

    Haskell中,range的表达类似于数学, 使用若干样例作为模板,使用..表示省略,元素个数可以有限也可以无限。默认模式类似求succ。 

    range在我的理解里与python中类似,也是一种iterator对象。考虑到这门语言lazy的性质,只有在需要的时候才会被呈现。这也是为什么上面的cycle, repeat可以使用(毕竟算法要求有限性)

   另外,这里的range是前后都闭的。

List Comprehension

    Haskell中的list comprehension的用法与Python类似,但是表达上更接近数学中的集合表达。使用|分割元素和条件,使用,分割多个条件, 使用<- 表达属于。范围限制条件放在其他条件之前。    

Tuple

    tuple可以存放类型不同的元素。不同长度或者元素种类不同的tuple都被视为不同的类型,不能放在同一个list中。 tuple使用( ) 包围。

    对于二元组, 可以使用fst 和scd 获取第一个和第二个元素。

你可能感兴趣的:(Haskell入门(一): 逻辑运算,list,tuple等)