Проблема с String.split в F # - PullRequest
       0

Проблема с String.split в F #

2 голосов
/ 26 сентября 2011

У меня проблемы со следующим кодом, я пытаюсь построить лексер.

Опять же, я использую примеры из 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;;

У меня объявлены следующие пространства имен: -

          open System
          open System.IO
          open System.Runtime.Serialization.Formatters.Binary
          open Microsoft.FSharp.Core

Но в функции read_matrix «split» в «Split.string» не распознается. Также intellisense не распознает «Матрицу».

Я попытался объявить множество пространств имен, чтобы увидеть, распознают ли они метод, но ничего не работает (мой intellisense даже не распознает System.Math).

Прошу прощения, если это глупый вопрос, я просмотрел весь MSDN и другие места, но ничего не смог найти.

Может ли кто-нибудь помочь мне заставить VS распознавать «сплит» и «матрицу»?

Большое спасибо.

Ответы [ 4 ]

7 голосов
/ 26 сентября 2011

Есть несколько проблем.Ваш корпус неверен.Это Split, а не split.Это экземплярный (не статический) метод.Разделители должны быть массивом, а не списком.Следующие работы:

let read_matrix filename =
  lines_of_file filename
  |> Seq.map (fun line -> line.Split ' ')
  |> Seq.map (Seq.map float)
  |> Math.Matrix.ofSeq

Кстати, Math.Matrix.of_seq устарела.Сейчас Math.Matrix.ofSeq.

5 голосов
/ 26 сентября 2011

Чтобы сделать методы экземпляра более естественными для использования в F #, нужно определить простые вспомогательные функции:

let split separators (x:string) = x.Split(separators)
// Can now pipe into it:
lines_of_file filename
|> Seq.map (split [|' '|])
1 голос
/ 26 сентября 2011

Также для проблемы Split. Split - это метод для экземпляра строки. Вы не можете вызывать его как статический метод, как вы это делали ..

ex: "Some string value".Split ([| '' |]) - правильный подход для разделения строки, передавая список разделителей в виде массива

1 голос
/ 26 сентября 2011

Что касается метода Math.Matrix, то вам нужно установить из f # powerpack ...

Вы можете прочитать эту ветку Stackoverflow .. , что-случилось-в-майкрософт-FSharp-математической матрицы

Также для проблемы Split. Split - это метод для экземпляра строки. Вы не можете вызывать его как статический метод, как вы это делали ..

ex: «Некоторое строковое значение» .Split ([| '' |]) - правильный подход для разделения строки, передавая список разделителей в виде массива

...