这几天在学习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方法的真实含义相关推荐

  1. (MSDN)VB.NET的强大和C#语言的比较【转载】

    (MSDN)VB.NET的强大和C#语言的比较[转载] 2009-08-21 11:57 在网上经常能看到    一些评论和比较C#.VB.net优劣的文章.其中绝大多数都认为:VB.net就没有它存 ...

  2. 不用下载任何软件,比360强力删除还强的删除文件方法

    不用下载任何软件,比360强力删除还强的删除文件方法 当你遇到流氓.病毒软件的时候,是否因为不想下载360这个同样是流氓软件去使用360强力删除而焦虑? 下面介绍一个不用下载任何软件就可以实现超强力删 ...

  3. JavaScript中一些实用性强的函数和方法

    该文章用于记录一些,javascript在个人项目中比较实用的,乏用性强的一些公共方法. 1.从地址栏获取参数 类似于:http://www.xxxxx.com/other.html?name=hua ...

  4. 关于Java中Match类的appendReplacement()方法的一个坑{ character to be escaped }

    关于Java中Match类的appendReplacement()方法的一个坑{java.lang.IllegalArgumentException: character to be escaped ...

  5. 最强的数据扩增方法竟然是添加标点符号?

    今天的这篇文章源自于EMNLP 2021 Findings,论文标题为<AEDA: An Easier Data Augmentation Technique for Text Classifi ...

  6. 2023百度强引百度蜘蛛方法(百度蜘蛛秒引工具)

    当谈到SEO时,关键字是最基本的元素之一.使用正确的关键字可以帮助您的网站在搜索引擎结果页面(SERP)中排名更高.在本篇文章中,我们将重点介绍2023年百度强引百度蜘蛛方法和百度蜘蛛秒引工具,并提供 ...

  7. ABB机器人选项包,密钥,三种方法,真实、虚拟、密钥三种方法

    ABB机器人选项包,密钥,三种方法,真实.虚拟.密钥三种方法,有教程.有软件.也有密钥 YID:75188661261334891

  8. 自动驾驶 l5 ai_强AI和弱AI的真实故事以及适用于自动驾驶汽车的信息

    自动驾驶 l5 ai Dr. Lance Eliot, AI Insider AI Insider博士Lance Eliot博士 [Ed. Note: For reader's interested ...

  9. Linux开机自动化执行脚本的四种方法(真实案例分享)

    Linux开机自动化执行脚本的四种方法(真实案例分享) 最近眼睛有点疼,可能是长时间面对电脑屏幕的原因罢.百度后安装了Redshift这款护眼工具,只要事先写好配置文件它会根据你的地理位置自动调节屏幕 ...

最新文章

  1. mysql分组后组内排序_数据小白的转行之路-MYSQL(七)
  2. firefox如何载入json文件_如何去解决JS跨域问题 怎么能学好Web前端开发
  3. 动态壁纸安卓_安卓 高清 动态 壁纸
  4. JAVA调用 keras,在TensorFlow(Python, Java)环境下使用Keras模型
  5. 【基础数论】欧拉函数
  6. Java 输入输出流 转载
  7. NP、OSPF Stub区域
  8. Android 下拉刷新库,这一个就够了!
  9. 树莓派Raspberry pi 4B 运行 WuKong-Robot 智能语音对话机器人
  10. 自动驾驶标志性事件来了,今早你上“车”了吗?
  11. python自学视频与excel_三大金融工具特训班_金融职场+智能量化高手必修课-Wind来袭+Python金融+Excel分析,全套视频教程学习资料通过百度云网盘下载...
  12. silvaco学习之收敛
  13. CSS实现背景图片固定
  14. Solving environment: failed
  15. 【人工智能II】实验2 强化学习Q-Learning算法
  16. GitHub 预览 Copilot,一个 OpenAI 驱动的编码助手
  17. 今日宜募捐?刘强东、李彦宏清北壕捐大PK
  18. 分析蓝牙协议栈源码bstack
  19. 深入了解OpenOffice.org(三)
  20. 计算机中信息存储的最小单位是字长,计算机中存储信息的最小单位是什么

热门文章

  1. 【ESP32】1.Arduino IDE 2.0安装详解
  2. java duplicate entry_java向数据库插入数据时的错误: Duplicate entry '' for key 'PRIMARY' 问题解决...
  3. win10下安装tensorflow+cuda8.0.61+cudnn5.1+python3.5(附cuda和相对于的cudnn版本网盘下载)
  4. ant design pro模板_Ant Design Pro入门教程,安装,运行(V5 Typescript版)
  5. java吃货联盟的实训报告_作业:吃货联盟
  6. 通过python构建一个区块链来学习区块链
  7. mysql连接查询分为几种方式_SQL多表查询的几种连接方式
  8. 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
  9. vb 打开sdf数据_VB中的ComboBox你真的会用吗?
  10. 太方便了,告别「复制+粘贴」,Python 轻松实现 PDF 转文本模式~