我有一个像 [1..12]
的列表,我想得到一个像 [4..9]
的片段。不知道我该怎么做,我是 F# 新手。我不知道是否有内置方法,但我想知道手动方式。
最佳答案
立即回答您的问题:您如何从 list 中分一杯羹?模式匹配。
您可以使用模式匹配来编写从列表中提取范围的函数。基本算法是在 E < Min 时跳过列表中的每个元素,然后在 E <= Max 时取每个元素。像这样的东西:
let range min max xs =
let rec skipWhile f = function
| x::xs when f x -> skipWhile f xs
| xs -> xs
let rec takeWhile f acc = function
| x::xs when f x -> takeWhile f (x::acc) xs
| _ -> List.rev acc
xs
|> skipWhile ((>) min)
|> takeWhile ((>=) max) []
[1..12] |> range 4 9
> val it : int list = [4; 5; 6; 7; 8; 9]
关于f# - 如何获得一份 list ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18081076/