2016-08-04 5 views
2

Я совершенно новый для F #, поэтому прошу прощения, если я использую неправильные имена для вещей.Использование Pipe Forward с вложенными последовательностями

Я пытаюсь использовать F # для разбора веб-страницу, которая выглядит примерно так:

<!--This is simplified, in reality there are more divs, anchors etc. --> 
<html> 
<body> 
    <div class="pr-single"><a href="http://google.ca">Google</a></div> 
    <div class="pr-single"><a href="http://apple.com">Apple</a></div> 
    <div class="pr-single"><a href="http://microsoft.com">Microsoft</a></div> 
</body> 
</html> 

Я объявленную предустановленный вариант

type PromoterPage = FSharp.Data.HtmlProvider<"http://somewebpage.com"> 

И теперь я пытаюсь получить список всех ссылок на странице. Мой мыслительный процесс был:

  1. Получить все внешние дивы по имени класса
  2. Получить потомки всех этих дивы
  3. Сбор этих потомков в виде плоского списка
  4. Фильтр этот список вниз только <a> теги

Моя попытка это ниже:

let GetFirst (page:PromoterPage) = 
    page.Html.Descendants() 
    |> Seq.filter(fun n -> n.HasClass("pr-single"))     //Find the divs 
    |> Seq.map(fun n -> n.Descendants())       //Get the descendants 
    |> Seq.collect(fun n -> n |> Seq.where(fun m -> m.HasName("a")) //Filter and collect the anchors 

Проблема заключается в том, что вы не можете вложить функции Seq или что я делаю это неправильно. Я получаю сообщение об ошибке:

Incomplete values or function definition. If this is an expression, the body of the expression must be indented to the same column as the keyword.

Могу ли я гнездо Seq функции так, как я пытаюсь здесь? Думаю ли я об этом неправильно?

ответ

5

Вы упускаете закрывающие скобки:

|> Seq.collect(fun n -> n |> Seq.where(fun m -> m.HasName("a"))) 

Can I nest Seq functions the way I'm trying to here?

Да, это прекрасно для гнездовых функций с трубопроводами в лямбды. Тем не менее, я часто вытаскиваю их в локальные функции, так как это может сделать код более читаемым в долгосрочной перспективе.

+0

Вау, это неловко. :) Благодаря! – JoshVarty

 Смежные вопросы

  • Нет связанных вопросов^_^