f# - 如何获得一份 list ?

标签 f#

我有一个像 [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/

相关文章:

f# - 如何根据 Power Query 中 Power BI 参数中以逗号分隔的值列表删除行?

f# - 我希望Canopy Web测试结果显示在VS 2013测试浏览器中...

f# - 在 F# 中重载 [,] 运算符

F# 惯用的 async while 循环累加转换

f# - 为 F# 中的可区分联合自动生成谓词和访问器

.net - 4.6.1 F# 应用程序抛出 FileNotFoundException : FSharp. 核心

F# 将文本文件分配给变量(字符串)

parallel-processing - 为什么我们没有通过 PSeq 获得性能提升?

f# - Visual Studio - f# - 错误 FS0588 : Block following this 'let' is unfinished. 期望表达式

matlab - 您使用 Matlab/F#/R 进行数据分析和建模算法的经验