6.7.1 用F# 实现列表

虽然我们已经使用过 F# 中的列表,还用 C# 实现了相同的功能,但还没有研究如何用F# 实现列表类型。当我们前面讨论列表时,看到列表既可以表示为空值(nil)(空列表),也可以表示包含元素和引用列表其余部分的 cons cell。

现在,如果我们回顾上一章中有关值的内容,这就像是有两个选项的可选值;微有一点稍不同,列表类型是递归的,因此,cons cell 包含了列表自身类型的值。清单 6.19 是一个列表类型的定义,与 F# 标准库类似。

清单6.19 定义函数式列表类型 (F#)

> type List<‘T> =  [1]

|Nil    [2]

|Cons of ‘T * List<‘T>    [3]

type List<‘T> = (...)

> let list = Cons(1, Cons(2, Cons(3,Nil)));;  <-- 创建了包含 1、2、3 的列表

val list : List<‘T>

这个类型写成有一个类型参数的泛型类型[1],类型参数表示保存在列表中值的类型。F# 中的可选值用差别联合表示,并且这个特定的联合有两个识别器,第一个[2]表示空列表,第二个[3]表示列表,有一个元素(类型为 ‘T),和指向列表其余部分的引用,其类型递归地写作 List<‘T>。

示例代码的最后一行创建了有三个元素的列表,Cons 构造函数的第一个参数值总是数字,第二个参数值是列表,依次使用另外的 Cons 或 the Nil 识别器构建;内置的 F # 列表类型也完全是用这种方式声明的。先前,我们处理列表使用两个基元,:: 构造函数对应于定义中的 Cons,[] 表示空值。

一般情况下,创建递归的差别联合类型是表示程序数据的一种常见方式,我们将在下一章讨论。列表类型介于简单值与复杂的程序数据之间,两种方式都可以解释,具体取决于它在程序中如何使用。我们还将看到递归联合能够表示许多标准的设计模式,但现在,我们要回到高阶函数,它使列表更易于处理。

时间: 2024-08-28 01:57:17

6.7.1 用F# 实现列表的相关文章

使用 F# 列表

在 C# 中使用 F# 的列表,是完全可能的,但是,我建议不要用,因为,只要再做一点,就会使事情在 C# 看来更加自然.例如,把列表转换成数组很简单,用List.toArray 函数:转换成System.Collections.Generic.List,用 new ResizeArray<_>()构造函数:转换成System.Collections.Generic.IEnumerable,用 List.toSeq 函数.这些类型的使用对于C# 程序员来说,实在是太简单了,特别是System.A

2017.7.17 列表去重,列表元组,集合

生成列表: aa = [i for i in range(1,18)] 列表    a = [11,22,3,11,22,3]增删改查 元组    b = (11,22,33,11,22,33)只读 集合    c = {11,22,33} 增删改查,但是元素不能重复 列表去重 d = set(a)  d 是集合 f = list(d)    f是列表

第二章:python列表

任何值得着手创建的程序都必然会处理数据.为了降低复杂性,通常可以把数据组织为列表. 使用括号中记号法访问列表数据 首先定义一个名字列表,然后使用print()在屏幕上显示这列表..接下来,使用len()得到列表中有多少个数据项,然后再访问并显示第二个数据项的值: >>> cast=["a","b","c"] >>> print(cast) ['a', 'b', 'c'] >>> print(l

F# 之旅(上)

写在前面的话 解答一下在上一篇文章<在Visual Studio中入门F#>中有人的提问, 1. 问:是准备写 F# 系列吗?    答:当然不是,本人也是刚刚学习 F#,只是翻译微软官方的文档,但是我会尽力翻译更多的文章. 2. 问:你们的项目使用F#写的吗?    答:本人大三学生,也不是什么大佬,兴趣而已. 在这篇文章中 怎样运行示例代码 函数和模块 数字.布尔值和字符串 元组 管线和组成 列表.数组和序列 学习 F# 最好的方式是读写 F# 代码.本文将介绍 F# 语言的一些主要功能,

Python中list(列表)、tuple(元组)、dict(字典)基本操作快速入门

最近看了一下Python的列表.字典以及元组等几种数据类型,感觉这几种数据类型比较常用,顺便总结了一下一些比较常用的用法. 列表是Python中比较常用的数据类型,并且列表是可以改变的,使用也非常简单,具体操作如下: 1)如创建一个列表: list1 = [1,2,3] list2 = ['a','b','c'] list3 = [1,2,3,'a','b','abc'] list4 = [1,[2,3],['a','b',''c]] #创建一个有序列表 list5 = range(10) #创

Python编写在Maya中查看目录列表的插件

之前写过一篇用Python遍历文件夹的文章,今天把代码扩展一下,做成一个有UI用户界面的Maya插件,可以直接在Maya中运行: 功能是显示磁盘分区目录下的文件列表: import os def chDisk(): cd = mc.optionMenu(op, v=1, q=1) mls = os.listdir(cd) # 列表间的切换 mc.textScrollList(directoryList, e=1, removeAll=1) mc.textScrollList(directoryL

[Python]学习基础篇:列表(List)的浅解

列表 首先先说明中python中数组下标的使用,在java,c或者c++中,每个数组的下标必须是正数,不能出现负数,如在java,c或者c++中使用a[-1],编辑器会报错,而在python中数组的访问时可以出现负数下标,表示倒数第几个元素. list列表的定义 Python中列表的定义比较简单,不需要想java中需要用List类创建的一个对象.在java中不同类型的对象是不能存放在同一个列表中,而Python中同一个list可以存放不同类型的数据,同时也可以存放一个obj. 格式:list=[

Python基础(二)之数据类型和运算(4)—— 列表

列表 Python 有几个 复合数据类型,用于表示其它的值.最通用的是 list (列表) ,它可以写作中括号之间的一列逗号分隔的值.列表的元素不必是同一类型: >>> squares = [1, 4, 9, 16, 25] >>> squares [1, 4, 9, 16, 25] 索引: names = ['Alex',"Tenglan",'Eric'] >>> names[0] 'Alex' >>> name

Python老男孩 day12 列表的魔法

#通过list类创建的对象#对象.方法() #li对象调用XX方法#######################################灰魔法(List类中提供的方法)#########################################参数#1.原来值最后追加li = [11, 22, 33, 44]li.append(5)li.append('aa')li.append([1122,1234])print(li) 运行结果:[11, 22, 33, 44, 5, 'aa'