Я пытаюсь получить второй элемент в списке в Haskell. Я бы предположил, что лучший способ сделать это - получить голову хвоста списка.Второй самый последний элемент списка 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"
, но я получаю следующее: ошибка
Разбор в схеме: голова
Возможно вызвано недостающий 'делать'?
Почему мне нужно сделать do
или это ложное предположение?
Да, это ложное предложение. вы можете написать то, что хотите, как 'head [b | (a: b: _) <- history] '-' a' уже является «голова». Но вы должны * никогда не измерять «длину» списка, если можете его избежать. И здесь вы можете избежать этого, просто определив свою функцию как совпадение с шаблоном (a.o.t. ваше использование соответствия шаблону внутри понимания списка), как предлагают некоторые ответы. –