F#match的强大和List.tail方法的真实含义
这几天在学习F#,感觉F#在很多方面确实比较简洁而强大,其match表达式就是其中之一,match with 跟C#的Switch类似,但功能上要强大很多,下面是例子:
let print_any x = printfn "%A" x
let rec findSequence l =
match l with
| [a; b; c; d] -> //a,b,c,d其实只是占位符号,表示4个元素的数组,当然,如果匹配到,你可以通过abcd访问到这4个元素
printfn "Last 4 numbers in the list were %i %i %i %i" a b c d
| 1 :: 2 :: 3 :: tail -> //形如1,2,3,任意元素
printfn "Found sequence 1, 2, 3 within the list"
findSequence tail
| head :: mid ::tail -> //匹配3个元素的元组,因为每个数组最后都隐含一个空,所以只要是数组元素大于2,都可匹配到.
printfn "xxxx:%A %A %A" head mid tail
findSequence tail
| head :: tail -> //同上,匹配一个二元组。
printfn "xxxx:%A %A" head tail
| [] -> ()
let testSequence = [1; 2; 3;4; 5; 6; 7; 8; 9; 8; 7; 6; 5; 4; 3; 2; 1]
let b1 = findSequence testSequence
print_any b1
match with确实很强大,特别是在集合做分支的时候.但这里面有个误导,就是上面的head,tail并不是我们所理解的链表中的头和位,在这里其实只是一个占位符号.当然这里还是标示符号命名造成的,而List的head和tail就有误导人的之嫌:
let listOfList = [[2; 3; 5]; [7; 11; 13]; [17; 19; 23; 29]]
let rec concatList l =
match l with
| head :: tail -> head @ (concatList tail)
| [] -> []
let rec concatListOrg l =
if List.isEmpty l = false then
let head = List.head l in
let tail = List.tail l in
head @ (concatListOrg tail)
else
[]
let print_any x = printfn "%A" x
let primes = concatList listOfList
print_any primes
head指向的是序列的头元素,而tail指向的是除了head元素之外的剩下序列.当然,这个也没有对何错,只是容易让人误解.我们在学链表的时候,head,tail一般都指首尾元素.如果用remain剩下来表达tail所指也有不好.当然大家弄明白了也就无所谓了.
F#match的强大和List.tail方法的真实含义相关推荐
- (MSDN)VB.NET的强大和C#语言的比较【转载】
(MSDN)VB.NET的强大和C#语言的比较[转载] 2009-08-21 11:57 在网上经常能看到 一些评论和比较C#.VB.net优劣的文章.其中绝大多数都认为:VB.net就没有它存 ...
- 不用下载任何软件,比360强力删除还强的删除文件方法
不用下载任何软件,比360强力删除还强的删除文件方法 当你遇到流氓.病毒软件的时候,是否因为不想下载360这个同样是流氓软件去使用360强力删除而焦虑? 下面介绍一个不用下载任何软件就可以实现超强力删 ...
- JavaScript中一些实用性强的函数和方法
该文章用于记录一些,javascript在个人项目中比较实用的,乏用性强的一些公共方法. 1.从地址栏获取参数 类似于:http://www.xxxxx.com/other.html?name=hua ...
- 关于Java中Match类的appendReplacement()方法的一个坑{ character to be escaped }
关于Java中Match类的appendReplacement()方法的一个坑{java.lang.IllegalArgumentException: character to be escaped ...
- 最强的数据扩增方法竟然是添加标点符号?
今天的这篇文章源自于EMNLP 2021 Findings,论文标题为<AEDA: An Easier Data Augmentation Technique for Text Classifi ...
- 2023百度强引百度蜘蛛方法(百度蜘蛛秒引工具)
当谈到SEO时,关键字是最基本的元素之一.使用正确的关键字可以帮助您的网站在搜索引擎结果页面(SERP)中排名更高.在本篇文章中,我们将重点介绍2023年百度强引百度蜘蛛方法和百度蜘蛛秒引工具,并提供 ...
- ABB机器人选项包,密钥,三种方法,真实、虚拟、密钥三种方法
ABB机器人选项包,密钥,三种方法,真实.虚拟.密钥三种方法,有教程.有软件.也有密钥 YID:75188661261334891
- 自动驾驶 l5 ai_强AI和弱AI的真实故事以及适用于自动驾驶汽车的信息
自动驾驶 l5 ai Dr. Lance Eliot, AI Insider AI Insider博士Lance Eliot博士 [Ed. Note: For reader's interested ...
- Linux开机自动化执行脚本的四种方法(真实案例分享)
Linux开机自动化执行脚本的四种方法(真实案例分享) 最近眼睛有点疼,可能是长时间面对电脑屏幕的原因罢.百度后安装了Redshift这款护眼工具,只要事先写好配置文件它会根据你的地理位置自动调节屏幕 ...
最新文章
- mysql分组后组内排序_数据小白的转行之路-MYSQL(七)
- firefox如何载入json文件_如何去解决JS跨域问题 怎么能学好Web前端开发
- 动态壁纸安卓_安卓 高清 动态 壁纸
- JAVA调用 keras,在TensorFlow(Python, Java)环境下使用Keras模型
- 【基础数论】欧拉函数
- Java 输入输出流 转载
- NP、OSPF Stub区域
- Android 下拉刷新库,这一个就够了!
- 树莓派Raspberry pi 4B 运行 WuKong-Robot 智能语音对话机器人
- 自动驾驶标志性事件来了,今早你上“车”了吗?
- python自学视频与excel_三大金融工具特训班_金融职场+智能量化高手必修课-Wind来袭+Python金融+Excel分析,全套视频教程学习资料通过百度云网盘下载...
- silvaco学习之收敛
- CSS实现背景图片固定
- Solving environment: failed
- 【人工智能II】实验2 强化学习Q-Learning算法
- GitHub 预览 Copilot,一个 OpenAI 驱动的编码助手
- 今日宜募捐?刘强东、李彦宏清北壕捐大PK
- 分析蓝牙协议栈源码bstack
- 深入了解OpenOffice.org(三)
- 计算机中信息存储的最小单位是字长,计算机中存储信息的最小单位是什么
热门文章
- 【ESP32】1.Arduino IDE 2.0安装详解
- java duplicate entry_java向数据库插入数据时的错误: Duplicate entry '' for key 'PRIMARY' 问题解决...
- win10下安装tensorflow+cuda8.0.61+cudnn5.1+python3.5(附cuda和相对于的cudnn版本网盘下载)
- ant design pro模板_Ant Design Pro入门教程,安装,运行(V5 Typescript版)
- java吃货联盟的实训报告_作业:吃货联盟
- 通过python构建一个区块链来学习区块链
- mysql连接查询分为几种方式_SQL多表查询的几种连接方式
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
- vb 打开sdf数据_VB中的ComboBox你真的会用吗?
- 太方便了,告别「复制+粘贴」,Python 轻松实现 PDF 转文本模式~