簡體   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