首页
学习
活动
专区
圈层
工具
发布

Haskell 基础

中的if语句与其他语言不同,else是不可以省略的 doubleSmallNum x = if x > 10 then x else x * 2 Haskell 中的 if 语句的另一个特点就是它其实是个表达式...List 列表由方括号以及被逗号间隔的元素组成: Prelude> [1,2,3] [1,2,3] 空列表:[],列表中所有元素必须是同一类型。...1 2 上面的例子就是从列表l中取下标为1的元素 list可以用来装list: Prelude> let l = [[1,2,3], [1,2,3,4], [1,2,3,4,5]] haskell不要求每个元素的长度一致...因为元素类型不一致 两个元素的Tuple可以称为序对(Pair) Tuple不能是单元素的,因为没有意义 操作函数 fst 返回序对的首项(只能操作序对,不能操作三元组等其他数量的Tuple) snd...返回序对的尾项 Prudule> fst (1,2,[1,2,3]) 1 Prudule> snd (1,2,[1,2,3]) [1,2,3] zip 将两个list交叉配对生成一组Pair Prudule

33510

记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值

# 记录一个python里面很神奇的操作 # 今天记录一个很神奇的操作。关于序列的增量赋值。如果你很熟悉增量赋值,你也不妨看下去,我想说的是有关于增量赋值和元组之间一种神奇的操作。...** 用列表举例 **a+=b**,使用 **\_\_add\_\_** 的话就像是使用了`a.extend(b)`,如果使用 **\_\_add\_\_** 的话,则是 `a = a+b`,前者是直接在原列表上进行扩展...,而后者是先从原列表中取出值,在一个新的列表中进行扩展,然后再将新的列表对象返回给变量,显然后者的消耗要大些。...将t[2]的值,存入TOS(Top Of Stack 栈的顶端)。 2. 计算TOS +=b 。这一步可以完成,是因为TOS指向的是一个列表(可变对象)。 3. t[2] = TOS 赋值。...这一步失败,并且报错,因为t是不可变的元组 **我们可以通过python tutor这个网站去找到里面运行的详细过程** !

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基础语法_Haskell笔记1

    (partially applied),所以没有得到计算结果,而是返回了函数(/ 2) :: Fractional a => a -> a P.S.(-)函数比较特殊,因为(- 2)表示负2,而不返回一个新函数...参数列表后面多了| 条件表示不同的函数体分支,被调用时满足条件就执行对应函数体并返回,否则就按顺序依次向下检查 注意,最后的otherwise比较有意思,因为: > :i otherwise otherwise...expected type ‘(t, [Char])’ with actual type ‘(Integer, [Char], [Char])’ 与List一样,如果元组中的元素可比较...,那么同类型元组也可以比较 复杂一点的例子,求所有三边长度皆为整数且小于等于10,周长为24的直角三角形: [ (a, b, c) | c <- [1..10], b <- [1..c], a <- [...1..b], a + b + c == 24, a^2 + b^2 == c^2 ] 注意其中隐含的边长关系:c >= b >= a,算作去重规则 常用函数 fst/snd取二元组的首元/尾元: fst

    2.6K30

    Haskell Type与Typeclass

    haskell中所有函数都是只接收一个参数的,所有函数都是currying的。...常见类型 Int 整数,与平台位数相关 Integer 无限大整数 Float 单精度浮点数 Double 双精度浮点数 Bool Char Tuple的类型取决于它的长度与其中项的类型,空Tuple也是一个类型...:t fst fst :: (a, b) -> a 可以看到fst取一个包含两个型别的 Tuple 作参数,并以第一个项的型别作为回传值。...a这个type必须是Eq的一个实现(相当于OOP中的a implement Eq) =>符号左边的部分叫做类型约束 Eq这个Typeclass提供了判断相等性的接口,凡是可比较相等性的类型必定属于Eq..."5" *** Exception: Prelude.read: no parse 这是因为haskell无法推导出我们想要的是一个什么类型的值,read函数的类型声明: Prelude> :t read

    35810

    只需七步!零基础入门Python变量与数据类型

    Python的一个非常有用方面就是容器类型的概念,容器有二种基本形式:序列和映射。有次序的序列类型是列表(动态数组)、元组和字符串。...所有序列类型都是位置索引的(从0到长度−1),并且除了字符串,都可以包含任意类型的对象,在同一个序列中包括多种类型的对象。字符串和元组是不可变的,使得它们成为字典的键的完美候选者。...sorted()函数返回列表的副本,保持原始列表不变。可以按字母顺序或反字母顺序对列表中的项目进行排序。还可以颠倒列表的原始顺序。 小写和大写字母可能会影响排序顺序。...# 永久地对列表进行排序 >>> users.sort() # 以反字母顺序永久地对列表进行排序 >>> users.sort(reverse=True) # 临时排序 >>> print(sorted...元组与列表类似,但元组中的项不能被修改,即不可变数据类型。

    4.8K10

    倒排索引的精致结构

    如果只存储了文档 ID 列表,那么计算文档的评分时,就需要获取文档的原始内容进行分词后实时计算频率,这个性能无疑会差很多。...FST 只保留比较浅的节点在内存中,也就是说如果某个节点很深,它将会从 FST 中踢出去。如此内存就不会因为词汇太多而膨胀。 FST 就好比一颗大树的主干部分,细枝末节都在磁盘上有序存储。...Lucene 为什么要将 PostingList 设计成跳跃列表呢,这是为了做加速文档的交集运算。当查询的条件是两个 MUST 时,需要对两个词汇的 PostingList 进行交集计算。...计算交集时会选择短的列表作为「驱动列表」,驱动列表的指针在往前走时,另外一个列表也要跟着往前跳。就好比一个大人和一个小孩走路,大人走得快,小孩就得跟着跑才能追赶上。...同时因为跳跃列表的高层都在内存中,所以跳起来会非常的快,这样的交集运算就会有比较好的性能。

    1.3K20

    Python基础知识点梳理

    program_list.pop(1) 11 统计 len(list) 计算列表长度 len(program_list) 12 统计 list.count(obj) 统计数据在列表中出现的次数 program_list.count...02 统计 len(tuple) 计算元组长度 len(program_tuple) 03 统计 tuple.count(obj) 统计数据在列表中出现的次数 program_tuple.count(“...,如下: 函数 描述 说明 len(item) 计算元素的总个数 del(item) 删除变量 可以删除整个变量,加上索引可以只删除指定的元素 max(item) 返回元素的最大值 字典只针对key比较...min(item) 返回元素的最小值 字典只针对key比较 运算符 高级数据类型同样支持以下常见的运算符: 序号 运算符 描述 支持的数据类型 01 + 合并 列表,元组,字符串 02 * 重复 列表...,元组,字符串 03 in 元素是否存在 列表,元组,字典,字符串 04 not in 元素是否不存在 列表,元组,字典,字符串 05 > = 比较 列表,元组,字符串 切片 切片使用索引值可以方便地截取容器中一定范围的数据

    1.4K20

    Python基础知识点梳理

    program_list.pop(1) 11 统计 len(list) 计算列表长度 len(program_list) 12 统计 list.count(obj...() 将列表翻转 program_list.reverse() 元组 元组(tuple)与列表类似,区别是元组的数据不能修改,元组的符号是小括号(),初始化一个元组的语法如下: program_tuple...= ("c++", "java", "python", "php") 1 元组主要用于函数的参数和返回值,格式化字符串,以及保护列表数据,由于元组的数据无法修改,因此提供的方法也比较少: 序号...”) 02 统计 len(tuple) 计算元组长度 len(program_tuple) 03 统计 tuple.count(obj) 统计数据在列表中出现的次数...对于str提供了很多实用的方法,比较常用的有以下这些: 对字符串进行判断的方法: 序号 方法 说明 01 str.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回

    1.8K10

    C++17,标准库新引入的并行算法

    下面是一个 Haskell 的相关示例 (1) 和 (2) 处的代码分别定义了一个整数列表(ints)和一个字符串列表(strings).在 (3) 中,我给整数列表(ints)应用了一个 lambda...第一个函数将列表中的元素映射为元素的长度,第二个函数则将这些映射的长度相加.(9) 中的操作和 (7) 很相似,不同之处在于 foldl 只产生一个数值(而不是列表)并且需要一个初始元素(我指定初始元素为...0),现在,表达式(8)看起来应该比较简单了,他以":"作为分隔符连接了列表中的各个字符串元素....(译注:结果并不完全等同, Haskell 的 scanl 操作包含列表最后一个元素,后面提到的相关 Haskell 对应也是如此,注意区别) transform_exclusive_scan (6)...所执行的操作很类似,其中第一步的 lambda 函数将元素映射为了元素的长度,对应的 Haskell 表达式为: scanl1 (+) . map(\a -> length a) $ strings

    1.4K20

    Python编程思想(5):列表与元组的基础知识

    长度、最大值和最小值 Python提供了内建的len()、max()和min()函数来获取元组或列表的长度、最大值和最小值。...由于max()和min()函数要对元组、列表中的元素值比较大小,因此程序要求传给max()和min()函 数的元组、列表的元素必须是相同类型且可以比较大小。...152 # 计算最小值 print(min(a_tuple)) # -12 # 计算长度 print(len(a_tuple)) # 6 # 元素都是字符串的列表 b_list = ['Python...# Swift # 计算最小值 print(min(b_list)) # Java # 计算长度 print(len(b_list)) # 4 在上面代码中,首先使用3个函数对元素都是数值的元组进行处理...程序后半部分使用3个函数对元素都是字符串的列表进行处理,也可以看到程序获取列表的最大值、最小值和长度,这说明Python的字符串也是可比较大小,比较的规则是Python 依次按字符串中每个字符对应的编码来比较字符串的大小

    1.5K10

    python笔记(一)

    :.reverse() 反转列表:reverse(列表) 获取列表长度:len(列表) 遍历列表:for i in 列表: 最好的命名方式,列表取复数,遍历变量取单数,即:...复制列表: 列表2=列表1[:](可以指定复制的范围) 后头必须有方括号,否则是两个名字指向同一个列表,不是复制 元组:不可修改的列表(使用方法同列表) 元组=(200,50...) print(元组[0]) 不能单独修改一个元素的值,但是可以整体赋值: dimensions = (200, 50) dimensions = (400, 100) 编程标准: 缩进为四个空格...比较符号: 等于:== 不等于:!...:弹出列表中最后一个元素 remove:删除列表中的值,但只删第一个,后头再有重复的不管,当想要删除列表中多个重复的值时,使用while来进行删除

    1.8K30

    关于“Python”的核心知识点整理大全8

    例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它 们是不能修改的: dimensions.py 1 dimensions = (200, 50) 2 print(dimensions...最初制定这样的指南时,在大多数计算机中, 终端窗口每行只能容纳79字符;当前,计算机屏幕每行可容纳的字符数多得多,为何还要使用79 字符的标准行长呢?这里有别的原因。...函数lower() 不会修改存储在变量car中的值,因此进行这样的比较时不会影响原来的变量: 1 >>> car = 'Audi' 2 >>> car.lower() == 'audi' True 3...>>> car 'Audi' 在1处,我们将首字母大写的字符串'Audi'存储在变量car中;在2处,我们获取变量car的 值并将其转换为小写,再将结果与字符串'audi'进行比较。...例如,网站可能使用类似的测试来 确保用户名是独一无二的,而并非只是与另一个用户名的大小写不同。用户提交新的用户名时, 将把它转换为小写,并与所有既有用户名的小写版本进行比较。

    55610

    Python 的数据结构

    一旦创建了元组,元组中的对象就不能修改了,但对于元组中的可变对象,可以在原位进行修改; 可以用加号运算符将元组串联起来; 元组乘以一个整数,像列表一样,会将几个元组的复制串联起来(对象本身并没有被复制,...其中一个很有用的就是count(也适用于列表),它可以统计某个值得出现频率: 列表 与元组对比,列表的长度可变、内容可以被修改。你可以用方括号定义,或用 list() 函数创建列表。...对应于列表中每一项的键会被计算一次,然后在整个排序过程中使用。 默认值 None 表示直接对列表项排序而不计算一个单独的键值。...而这里 key 参数对应的 lambda 表达式的意思则是选取元组中的第二个元素作为比较参数(如果写作 key=lambda item:item[0] 的话则是选取第一个元素作为比较对象,也就是key值作为比较对象...sort 与 sorted 区别: list.sort() 和 sorted() 都有一个 key 形参来指定在进行比较之前要在每个列表元素上进行调用的函数。

    3.9K20

    【python数据分析】运算符与表达式

    常用的python运算符如下: 运算符 功能说明 + 算数加法,列表、元组、字符串合并与连接,正号 - 算术减法,集合的差集,相反数 * 算数乘法,序列元素的重复 / 真除法 // 求整商,向下取整 %...,还可以用于列表、元组、字符串这几个类型的对象与整数的乘法,表示序列的重复、生成新的列表、元组或字符串。...当关系运算符作用于集合时,可以用于测试集合之间的包含关系。 当作用于列表、元组或字符串时,逐个比较对应位置上的元素,直到得出确定的结论为止。...关系运算符可以连续使用,当连续使用时具有惰性求值的特点,即当已经确定最终结果之后,不再进行后面的比较。...在计算子表达式的值时,计算结果只要不是0、0.0、0j、None、False、空列表、空元组、空字符串、空字典、空集合、空range对象或其他空的容器对象,都被认为等价于true。

    48930

    Python3 | 筑基期, 推导式、迭代器、生成器!

    1.列表推导 描述: 列表推导式(List Comprehensions)也叫列表解析,灵感取值函数式编程语言Haskell,它是一个非常有用和灵活的工具,可以用来动态的创建列表。...描述:元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组,与列表推导式类似,但使用小括号 () 来表示元组,值得注意的是返回的结果是一个生成器对象而非元组...# 将列表中各字符串值为键,各字符串的长度为值,组成键值对 brand = ['Google','Tencent', 'Alibaba', 'Baidu'] newdict = {key:len(key...,是访问集合元素的一种方式, 可以记住遍历的位置的对象,适用于字符串,列表或元组对象。...一个函数 f,f 返回一个 list,这个 list 是动态计算出来的(不管是数学上的计算还是逻辑上的读取格式化),并且这个 list 会很大(无论是固定很大还是随着输入参数的增大而增大),这个时候,我们希望每次调用这个函数并使用迭代器进行循环的时候一个一个的得到每个

    20610
    领券