Функция valueOf
получает значение Int
соответствующего String
из списка кортежей. Может кто-нибудь объяснить, как работает третья линия?Поиск единственного элемента в списке с использованием понимания списка
type State = [(String,Int)]
valueOf :: State -> String -> Int
valueOf xs var = head [b | (a,b) <- xs , a ==var ]
Я никогда не видел выражение Haskell, как это, я больше привык к выражению, как это:
(\xs -> length xs > 15)
Обратите внимание, что это не очень хорошая реализация. 'head', как правило, неодобрительно; это определенно не безопасное использование (программа просто выйдет из строя, если ключ не будет найден, без труда увидеть, где все пошло не так). Лучше было бы что-то вроде этого: 'valueOf :: State -> String -> Maybe Int'. Для этой безопасной подписи есть фактически стандартные функции, доступные для поиска, как вы хотите: 'lookup' или' find'. Кроме того, рассмотрите [переход на «Карта»] (http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Map-Lazy.html), который более эффективен для таких поисков. – leftaroundabout