我在使用以下代码时遇到问题,我正在尝试构建一个词法分析器.
我再次使用F#中的科学家的例子.
let lines_of_file filename =
seq { use stream = File.OpenRead filename
use reader = new StreamReader(stream)
while not reader.EndOfStream do
yield reader.ReadLine() };;
let read_matrix filename =
lines_of_file filename
|> Seq.map (String.split [' '])
|> Seq.map (Seq.map float)
|> Math.Matrix.of_seq;;
Run Code Online (Sandbox Code Playgroud)
我声明了以下命名空间: -
open System
open System.IO
open System.Runtime.Serialization.Formatters.Binary
open Microsoft.FSharp.Core
Run Code Online (Sandbox Code Playgroud)
但是在read_matrix函数中,"Split.string"中的"split"无法识别.intellisense也不识别"矩阵".
我已经尝试声明了很多名称空间以查看它们是否识别该方法,但没有任何作用(我的intellisense甚至不识别System.Math).
我很抱歉,如果这是一个愚蠢的问题,我已经看过MSDN和其他地方,但我找不到任何东西.
任何人都可以帮助我让VS识别"分裂"和"矩阵"吗?
非常感谢.
有一些问题.你的外壳是错的.这Split,不是split.这是一个实例(非静态)方法.分隔符必须是数组,而不是列表.以下作品:
let read_matrix filename =
lines_of_file filename
|> Seq.map (fun line -> line.Split ' ')
|> Seq.map (Seq.map float)
|> Math.Matrix.ofSeq
Run Code Online (Sandbox Code Playgroud)
顺便提一下,Math.Matrix.of_seq已被弃用.现在是Math.Matrix.ofSeq.
在F#中使实例方法更自然的常见做法是定义简单的辅助函数:
let split separators (x:string) = x.Split(separators)
// Can now pipe into it:
lines_of_file filename
|> Seq.map (split [|' '|])
Run Code Online (Sandbox Code Playgroud)