我正在学习 f#,没有以前的函数式编程背景 - 开始取得进展,但一直坚持这一点。谁能帮我理解 99 个 f# 问题中第 9 个问题的解决方案 - 它们可以在这里找到:[http://fssnip.net/an][1]
基本上我不明白模式匹配在提供的解决方案中是如何工作的。首先什么是 xss?为任何帮助欢呼!
问题 9:将列表元素的连续重复项打包到子列表中。如果列表包含重复的元素,则应将它们放置在单独的子列表中。
例子:
包 ['a'; '一个'; '一个'; '一个'; 'b'; 'C'; 'C'; '一个'; '一个'; 'd'; 'e'; 'e'; 'e'; 'e']
验证它:字符列表列表 = [['a'; '一个'; '一个'; '一个']; ['b']; ['C'; 'C']; ['一个'; '一个']; ['d']; ['e'; 'e'; 'e'; 'e']]
样品溶液;
let pack xs =
let collect x = function
| (y::xs)::xss when x = y -> (x::y::xs)::xss
| xss -> [x]::xss
List.foldBack collect xs []