【PL理论】(6) F#:标准库之列表(List)

  ​​​​​

💭 写在前面:本章我们将介绍 F# 标准库的列表,我们将简单的先过一遍列表的一些常用操作,具体的讲解我们将放在后续章节。

目录

0x00 标准库:列表(List)

0x01 模式匹配与列表

0x02 列表拼接(@ 和 List.append)

0x03 过滤列表(List.filter)

0x04 映射列表(List.map)

0x05 折叠列表(List.fold)

0x06 反转列表(List.rev)


0x00 标准库:列表(List)

这是库支持的一种流行的数据结构,列表中的元素必须具有相同的类型。

像 List.length 这样的函数是多态的,可以用于整数列表和字符串列表(类似于 C++ 模板)。

类型可以用两种方式表示:int list 或者 List<int>

int list
List<int>

💬 代码演示:

let lst1: int list = [1; 2; 3; 4]
let lst2: List<string> = ["F#"; "OCaml"; "Scala"]let len1: int = List.length lst1
let len2: int = List.length lst2
let b: bool = List.contains 5 lst1 // returns false
let s: string = List.head lst2     // returns "F#"

0x01 模式匹配与列表

实际上,列表类型也是归纳定义的。

  • 基本情况:一个空列表 [\, ]
  • 归纳情况:一个元素被添加到现有列表的前面 e::lst

实际上  [1;2;3]\, \equiv \, 1 :: (2 :: (3 :: [])) ,我们可以使用模式匹配和递归计算许多事情。

// 在类型注解中,'a 表示任意类型
let rec length (lst: List<'a>) : int =
match lst with
| [] -> 0
| head :: tail -> 1 + (length tail)
let rec contains (e: 'a) (lst: List<'a>) : bool =
match lst with
| [] -> false
| head :: tail -> (head = e) || contains e tail

注意,这里有几个常见错误!首先,e::lst 表示将一个元素添加到一个列表的前面。

另一个常见的错误是使用 , 而不是 ;   ,它会被识别为元组列表。

0x02 列表拼接(@ 和 List.append)

如果你想要连接两个列表可以使用艾特符号 @ 拼接,使用 lst1\, @\, lst2

lst1 @ lst2

也可以使用 List.append() 拼接两个列表:

// 定义更多示例列表
let lst3: int list = [5; 6; 7]
let lst4: int list = [8; 9; 10]// 列表拼接
let lst5: int list = lst1 @ lst3 // [1; 2; 3; 4; 5; 6; 7]// 使用 List.append 进行拼接
let lst6: int list = List.append lst1 lst4 // [1; 2; 3; 4; 8; 9; 10]

0x03 过滤列表(List.filter)

在 F# 中,过滤列表(Filtering a List)是指从列表中提取满足某个条件的元素,形成一个新的列表,可以使用 List.filter 函数来完成。

💬 举个例子:元素的过滤可以用 List.filter,函数过滤出列表中所有的偶数:

let lst3: int list = [5; 6; 7]
let lst4: int list = [8; 9; 10]// 过滤列表中的元素
let evenNumbers: int list = List.filter (fun x -> x % 2 = 0) lst1 // [2; 4]

具体的操作我们会在接下来的章节详细讲解一下。

0x04 映射列表(List.map)

使用 List.map 函数将列表中的每个元素平方

let lst3: int list = [5; 6; 7]
let lst4: int list = [8; 9; 10]// 映射列表中的元素
let squares: int list = List.map (fun x -> x * x) lst1 // [1; 4; 9; 16]

0x05 折叠列表(List.fold)

使用 List.fold 函数计算列表中所有元素的和

let lst3: int list = [5; 6; 7]
let lst4: int list = [8; 9; 10]// 折叠列表,计算元素之和
let sum: int = List.fold (fun acc x -> acc + x) 0 lst1 // 10

0x06 反转列表(List.rev)

使用 List.rev 函数反转列表

let lst3: int list = [5; 6; 7]
let lst4: int list = [8; 9; 10]// 反转列表
let reversedLst1: int list = List.rev lst1 // [4; 3; 2; 1]


📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2024.6.5
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

C++reference[EB/OL]. []. http://www.cplusplus.com/reference/.

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

比特科技. C++[EB/OL]. 2021[2021.8.31]. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14.8k Star!CrewAI:部署一支由你指挥的人工智能代理大军,股票分析、发布帖子、支持Ollama!

原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; 14.8k Star&#xff01;CrewAI&#xff1a;部署一支由你指挥的人工智能代理大军&#xff0c;股票分析、发布帖子、支持Ollama&#xff01;…

计算机组成结构—多处理器

目录 一、SISD、SIMD、MIMD 和向量处理器 1. 费林分类法 2. SIMD 和向量处理器 二、硬件多线程 三、多核处理器和 SMP 1. 多核处理器 2. 共享内存多处理器&#xff08;SMP&#xff09; 3. MPP 和集群 一、SISD、SIMD、MIMD 和向量处理器 通过改进系统结构&#xff0c;可…

C++设计模式-外观模式,游戏引擎管理多个子系统,反汇编

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 30. 外观模式 为子系统定义一组统一的接口&#xff0c;这个高级接口会让子系统更容易被使用。应用&#xff1a;如在游戏开发中&#xff0c;游戏引擎包含多个子系统&#xff0c;如物理、渲染、粒子、UI、音频等。可以使用外观…

图像算法---自动曝光AE

一&#xff0c;自动曝光AE 自动曝光&#xff08;AE&#xff0c;全称Auto Exposure&#xff09;是一种在摄影和摄像中广泛使用的技术&#xff0c;它允许相机或摄像机根据环境光线条件自动调整曝光参数&#xff0c;以获得清晰、亮度适中的图像或视频。以下是关于自动曝光AE的详细…

31|HTTP3:甩掉TCP、TLS 的包袱,构建高效网络

前面两篇文章我们分析了HTTP/1和HTTP/2&#xff0c;在HTTP/2出现之前&#xff0c;开发者需要采取很多变通的方式来解决HTTP/1所存在的问题&#xff0c;不过HTTP/2在2018年就开始得到了大规模的应用&#xff0c;HTTP/1中存在的一大堆缺陷都得到了解决。 HTTP/2的一个核心特性是…

优卡集团冲刺港股上市:90后创始团队孵化,IPO前突击大额分红

现年26岁的鲁圳&#xff0c;正在带领其6年以来的创业成果冲击资本市场。 近日&#xff0c;金融居间机构服务商优卡集团&#xff08;Yoc Group&#xff09;向港交所递交上市申请&#xff0c;民银资本为其独家保荐人。透过招股书可知&#xff0c;优卡集团成立于2018年&#xff0…

递推 7-1 sdut-C语言实验-母牛的故事

7-1 sdut-C语言实验-母牛的故事 分数 20 全屏浏览 切换布局 作者 马新娟 单位 山东理工大学 有一对夫妇买了一头母牛&#xff0c;它从第2年起每年年初生一头小母牛。每头小母牛从第四个年头开始&#xff0c;每年年初也生一头小母牛。 请编程实现在第n年的时候&#xff0c;共…

[C++] 小游戏 猜数字 zty出品

#include <iostream> #include <cstdlib> #include <ctime>using namespace std;int main() {srand(time(0)); // 设置随机数种子int secretNumber rand() % 100 1; // 生成1到100之间的随机数int guess;int numGuesses 0;bool correct false;cout <&…

【CTF-Web】文件上传漏洞学习笔记(ctfshow题目)

文件上传 文章目录 文件上传What is Upload-File&#xff1f;Upload-File In CTFWeb151考点&#xff1a;前端校验解题&#xff1a; Web152考点&#xff1a;后端校验要严密解题&#xff1a; Web153考点&#xff1a;后端校验 配置文件介绍解题&#xff1a; Web154考点&#xff1a…

vcruntime140.dll找不到的正确处理方法,vcruntime140.dll是什么文件

vcruntime140.dll找不到的这个问题&#xff0c;相信不少人都有遇到吧&#xff1f;其实遇到了也不需要害怕&#xff0c;这只是一个很小的问题&#xff0c;我们完全可以自己快速修复。还有就是缺失这个vcruntime140.dll文件&#xff0c;你的一些程序是会打不开的&#xff0c;不用…

揭秘!2024版Camtasia永久免费,全新功能体验

在当今数字时代&#xff0c;视频已经成为了我们生活中不可或缺的一部分。无论是在工作中进行演示、培训&#xff0c;还是在生活中分享生活点滴&#xff0c;视频都扮演着重要的角色。而要想制作出高质量的视频&#xff0c;一款专业的录屏软件是必不可少的。今天&#xff0c;我就…

PHP函数大全之array_count_values()

array_count_values()函数是用于计算数组中每个值的出现次数的PHP函数&#xff0c;并返回一个关联数组&#xff0c;该数组的键表示原始数组中的唯一值&#xff0c;而键值表示该值在原始数组中的出现次数。 array_count_values()函数的一些注意事项&#xff1a; 该函数不区分大…

独立游戏《星尘异变》UE5 C++程序开发日志4——实现任务系统

目录 一、任务的数据结构 二、任务栏 三、随机事件奖励 1.随机事件的结构 2.随机事件池的初始化 3.生成随机事件 本游戏作为工厂游戏&#xff0c;任务系统的主要功能就是给玩家生产的目标和动力&#xff0c;也就是给玩家发布一个需要一定数量某星尘的订单&#xff0c;玩家…

美团发布2024年一季度财报:营收733亿元,同比增长25%

6月6日&#xff0c;美团(股票代码:3690.HK)发布2024年第一季度业绩报告。受益于经济持续回暖和消费复苏&#xff0c;公司各项业务继续取得稳健增长&#xff0c;营收733亿元(人民币&#xff0c;下同)&#xff0c;同比增长25%。 财报显示&#xff0c;一季度&#xff0c;美团继续…

找到自己的前提是认识自己

在探索自我和发现个人潜力的旅途中&#xff0c;认识自己是至关重要的第一步。只有当我们深入了解自己的内在世界&#xff0c;才能找到真正的自我&#xff0c;并在此基础上实现个人成长和发展。 自我认识的探索之旅 自我认识是一个深入探索自己内在世界的过程&#xff0c;它包…

Linux应用 sqlite3编程

1、概念 SQLite3是一个轻量级的、自包含的、基于文件的数据库管理系统&#xff0c;常用于移动设备、嵌入式设备和小型应用程序中&#xff0c;应用场景如下&#xff1a; 移动应用程序&#xff1a;由于SQLite3是零配置、无服务器的数据库引擎&#xff0c;非常适合用于移动应用程…

uni微信小程序editor富文本组件如何插入图片

需求 在editor中插入图片&#xff0c;并对图片进行编辑&#xff0c;简略看一下组件的属性&#xff0c;官网editor 组件 | uni-app官网 解决方案 首先要使用到ready这个属性&#xff0c;然后官网有给代码粘过来&#xff0c;简单解释一下这段代码的意思&#xff08;作用是在不同…

【校招】【社招】字节跳动UG营销算法工程师招聘

【校招】【社招】字节跳动UG营销算法工程师招聘 需要营销、广告、搜索、推荐等领域的人才加入 岗位简介 字节跳动增长智能-激励中台团队负责公司国内字节所有主要App&#xff08;包含但不仅限于抖音/抖音极速版/抖音火山版/今日头条/头条极速版/番茄小说/番茄畅听/西瓜视频&…

实体类所有

实体类 所有实体类的定义如下&#xff1a; Teacher 类 java 复制代码 package com.xinzhi.pojo; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; Data NoArgsConstructor AllArg…

星火秘境游戏开发链游app定制开发源码部署

星火秘境是一款神秘而充满冒险的游戏&#xff0c;开发这样一款游戏需要综合考虑多个方面&#xff0c;包括游戏设计、美术设计、程序开发、音效制作等。下面我将简要介绍一下游戏开发和链游app搭建的一般流程&#xff1a; 游戏设计&#xff1a; 确定游戏类型&#xff1a;星火秘…