Идиоматическое понимание списка Scala - первый элемент, который соответствует

Друзья, В последнее время я писал код на Scala, чтобы научиться этому языку, и в некоторых недавних экспериментах я использовал библиотеку NLP для создания набора слов с тегами для частей речи из ввода пользователя. .

Я хочу написать функцию, которая дает мне первый глагол в предложении. Если глаголов нет, то я хочу предположить, что первое слово в наборе - это глагол (например, если игрок только что набрал «кто» или «время безотказной работы», в моей игре они считаются глаголами).

Следующий блок кода настолько уродлив, что может полюбить только мать, и он воняет императивным программированием, и я хочу преобразовать его во что-то вроде идиоматической Scala, в идеале во что-то, что не имеет единственного оператора «если» в этом.

def firstVerb = {
    if (words.size == 1)
        words.head.value
    else {
        val outWords = words.filter( word => word.pos == Verb)
        if (outWords == Set.empty) 
            words.head.value
        else
            outWords.head.value 
    }
}

Переменная «слова» имеет тип ListBuffer [EnrichedWord], где EnrichedWord - это мой класс, который содержит часть речи (pos, содержит объекты case, такие как Verb, Noun и т. Д.) И исходное слово (value).

Любое руководство, которое вы, гении Scala, можете дать по рефакторингу этого уродливого кода, было бы фантастическим.

7
задан Kevin Hoffman 20 February 2012 в 15:16
поделиться