Я пытаюсь получить второй элемент в списке в Haskell. Я бы предположил, что лучший способ сделать это - получить начало хвоста списка.
secondMostRecentChoice :: History -> Choice // a choice is just a Bool like Bake | NoBake
secondMostRecentChoice [] = "Not Enough History"
secondMostRecentChoice history =
if ( length history == 1 )
then "Still Not Enough History"
else if (length history >= 2)
then (head [b | (head a,b) <- history]) //Here is the problem
else "Not supposed to be here"
else "Not supposed to be here"
но я получаю следующее:
Ошибка синтаксического анализа в шаблоне: head
Возможно, из-за отсутствия 'do'?
Зачем мне нужно делать do
или это ложное предложение?
head [b | (a:b:_) <- history]
—a
это уже голова. Но вы не должны никогда измерятьlength
списка, если можете этого избежать. И здесь вы можете избежать этого, просто определив свою функцию как сопоставление с образцом (помимо использования совпадения с образцом внутри понимания списка), как предполагают некоторые ответы. - person Will Ness   schedule 16.09.2014