提问人:blfuentes 提问时间:12/14/2019 更新时间:12/14/2019 访问量:302
将函数应用于每个元素以生成以 F 为单位的产量序列#
Apply function to each element to generate sequence with yield in F#
问:
我对 F# 比较陌生,对我来说更复杂的事情之一是如何正确使用产量。 我正在尝试通过读取文本文件并为每行提取带有 a 的值并将它们添加到序列(结果)中来生成序列
来自 http://www.fssnip.net/29/title/Regular-expression-active-pattern 的正则表达式函数
let (|Regex|_|) pattern input =
let m = Regex.Match(input, pattern)
if m.Success then Some(List.tail [ for g in m.Groups -> g.Value ])
else None
let extractCoordinates input =
match input with
| Regex @"\(([0-9]{3})\)[-. ]?([0-9]{3})[-. ]?([0-9]{4})" [ area; prefix; suffix ] ->
[ area; prefix; suffix ]
| _ -> []
读取文件并生成序列
open System.IO
let filepath = __SOURCE_DIRECTORY__ + @"../../test_input_01.txt"
let values =
File.ReadAllLines
|> Seq.map (fun l -> extractCoordinates l)
但这是行不通的
错误 FS0001:类型“string -> string []”与类型“seq<a>”不兼容
谁能告诉我如何将函数应用于列表的每个元素并将输出存储到序列结果中?使用与否...yield
答:
1赞
nilekirk
12/14/2019
#1
你的方法是正确的。您得到的错误是由于没有提供参数:Seq.map
File.ReadAllLines
let values =
File.ReadAllLines filepath
|> Seq.map (fun l -> extractCoordinates l)
上一个:为什么此 F# 序列表达式是立方时间而不是线性时间?
下一个:字符串的算术运算
评论