繁体   English   中英

如何压缩 f# 中的列表?

[英]how to compress a List in f#?

嗨,我是 f# 的新手,我做了这个练习,我无法弄清楚:“实现 Function:” let compress (l: List<'a>): List<'a> =... l 中的相同元素。 例如将 [a;a;a;a;b;b;c] 压缩为 [a;b;c]

我不允许使用 f# 的内置函数,需要通过模式匹配来执行此操作。

我当前的代码(不多):

let rec compress (l: List<'a>) : List<'a> = 
    match l with
    | [] -> l

谢谢您的帮助!

对于任何递归 function 您需要考虑:1. 终端情况和 2. 一般情况。 在您的场景中:

  1. 空列表[]
  2. 非空列表x::xs (其中 x 表示列表的头部,xs 表示 rest aka 尾部)

构建此类函数时要考虑的另一个重要方面是假设它适用于先前的值。 例如,在阶乘的情况下,我们假设 function 已经适用于先前的场景,例如 n-1 的阶乘。

let fact n = 
   match n with
   | 0 | 1 -> 1
   | _ -> n * fact (n-1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM