【F#2.0系列】使用F#的List

使用F#的List

创建一个list:

语法 描述 示例
[] 空list []
expr :: expr 将一个项加入一个list 1 :: [2; 3]
[expr; ...; expr] 列举项创建list [1; 2; 3]
[expr .. expr] 连续的数字 [1 .. 99]
[ for x in list ... ] 通过运算生成list(类似于Linq里的select) [ for x in 1..99 -> x * x ]
expr @ expr 合并两个list [1; 2] @ [3]

操作示例:

let oddPrimes = [3; 5; 7; 11]
let morePrimes = [13; 17]
let primes = 2 :: (oddPrimes @ morePrimes)
val primes : int list = [2; 3; 5; 7; 11; 13; 17]

list同样是不可变的(immutable):操作符“::”并未真正改变原list本身,相反的,它创建了一个新的list。示例:

> let people = [ "Adam"; "Dominic"; "James" ];;
val people : string list

> people;;
val it : string list = [ "Adam"; "Dominic"; "James" ]

> "Chris" :: people;;
val it : string list = [ "Chris"; "Adam"; "Dominic"; "James" ]

> people;;
val it : string list = [ "Adam"; "Dominic"; "James" ]

如你所见,people并未被改变。在内存中,F#将list表示为关联的list;每个F#的list的值(value)包含了自身的值以及指向下一个列表的指针。也就是说当你使用“::”来创建一个新的list的时候,新list的尾部就包含了一个指向老list的指针。

在我看来,通过不可变性与指针的结合,提高了list的内存利用效率。

我们再看一个分解(decompose)list的例子:

let oddPrimes = [3; 5; 7; 11]
let printFirst primes =
     match primes with
     | h :: t -> printfn "The first prime in the list is %d" h
     | [] -> printfn "No primes found in the list"
> printFirst oddPrimes;;
The first prime in the list is 3
val it : unit = ()

时间: 2024-09-15 16:49:21

【F#2.0系列】使用F#的List的相关文章

【F#2.0系列】使用选项(Option)

使用选项(Option) type 'T option = | None | Some of 'T 下面看一个例子: > let people = [ ("Adam", None); ("Eve" , None); ("Cain", Some("Adam","Eve")); ("Abel", Some("Adam","Eve")) ];; v

【F#2.0系列】使用F#进行算术操作

使用F#进行算术操作 基本类型: 类型 描述 示例 .NET 类型 bool True/false values true,false System.Boolean byte 8-bit unsigned integers 0uy,19uy,0xFFuy System.Byte sbyte 8-bit signed integers 0y, 19y,0xFFy System.SByte int16 16-bit signed integers 0s, 19s,0x0800s System.Int

【F#2.0系列】介绍String类型

使用String 几种不同的String书写方式: 示例 种类 类型 "Humpty Dumpty" 字符串 string "c:\Program Files" 字符串 string @"c:Program Files" 无转义(Verbatim) string string "xyZy3d2"B Literal byte array byte [] 'c' 字符 char 转义字符: 字符 含义 ASCII/Unicode

Entity Framework 5.0系列之Code First数据库迁移

我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Code First如何更新已有的模型呢?今天我们简单介绍一下Entity Framework的数据迁移功能. Entity Framework配置 在开始今天的话题之前先来看一下Entity Framework的配置,因为有很多朋友因为配置文件的问题造成"Migrations"命令执行失败.

ActionScript 3.0系列教程(4):爽快使用XML

xml|教程 ActionScript 3.0系列教程(3):Document Class特色为我们带来了什么? ActionScript 3.0系列教程(4):爽快使用XML 为什么放弃AS2.0选择AS3.0?如果只允许我说三个理由.那么AS3.0对XML的近乎完美的支持绝对是其中一个. 简单说说AS3.0中对于XML支持的不同吧: .AS2.0对XML的支持勉勉强强,将就着可以用.而AS3.0中对XML的支持是全方位的,极其强大和灵活的. AS2.0对XML的支持不是内建的(build-i

Flash ActionScript 3.0系列教程

教程 作者的blog: www.kingda.org ActionScript 3.0系列教程(1):与Flash9先来一次亲密接触! Flash Professional 9 ActionScript 3.0 Preview 版本今天发布了,意味着从此我们从此不仅仅只能使用Flex 2来使用AS3.0,更可以使用我们一直很熟悉的Flash IDE来进行AS3.0开发了. 与Flex 2不同,Flash 9 alpha(即上面的Flash Professional 9 ActionScript

F#简明教程二:F#类型系统和类型推断机制

在上一篇教程<F#与函数式编程概述>中我们了解到F#和函数式编程的一些特点,更多关于F#语言和函数式编程的介绍可以参考51CTO之前对微软MVP赵颉老师的专访<TechED 09视频专访:F#与函数式编程语言>.本节教程我们将学习到F#的一些基础原理,在开始之前,让我们先温习一下我们的Hello World代码: #light System.Console.WriteLine("This is one hello") printfn "This is

稳扎稳打Silverlight 3.0系列文章索引

相关文章:稳扎稳打Silverlight 2.0系列文章索引 在线DEMO http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html 1.稳扎稳打Silverlight(33) - 3.0控件之AutoCompleteBox,DataPager 介绍 Silverlight 3.0 控件一览: AutoCompleteBox - 自动完成控件.当用户输入部分信息后,此控件可以基于指定的过滤算法在一个下拉框中陈列出匹配项 Data

Asp.net MVC2.0系列文章-显示列表和详细页面操作

上一篇文章,我们简单地完成了新闻的添加操作(Asp.net MVC2.0系列文章-添 加操作)此篇文章,我们使用Asp.net MVC2.0实现新闻清单的展示和新闻详细页面 . 创建View视图Index和NewsDetails 创建新闻首页,用来显示新闻列表. 在Views/News目录下,单击右键,选择Add->View,修改相关配置如下图所 示 在生成的HTML代码中,进行相关展示方面的修改.主要代码如下: <% foreach (var item in Model) { %> &