f# - 将函数应用于每个元素以在 F# 中生成具有产量的序列
问题描述
我对 F# 比较陌生,对我来说更复杂的事情之一是如何正确使用 yield。我正在尝试通过读取文本文件并使用 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
与否...
解决方案
你的方法Seq.map
是正确的。您得到的错误是没有提供参数File.ReadAllLines
:
let values =
File.ReadAllLines filepath
|> Seq.map (fun l -> extractCoordinates l)
推荐阅读
- shell - Perl 使用回调运行交互式外部应用程序
- python - 添加唯一整数
- javascript - 无法在highchart js上显示数据
- css - 更改 WooCommerce 计费字段的 css
- angular - 如何使用 my-date-picker 填充默认日期
- mercurial - 在 .hgignore 中包含相对路径
- javascript - freeCodeCamp 计数卡
- php - 使用 PHP - SQLSTATE [42000] 创建数据库表:语法错误或访问冲突:1064
- java - 从特定列excel apache poi启动表
- reactjs - 连接 API 时出现 REACT、NODE、EXPRESS 错误