Фильтрация списка кортежей

Мне нравится разрабатывать против Firefox сначала, часто с помощью YUI Yahoo для сброса (и сетки для базовой структуры страницы), и с помощью условных директив IE для переопределения форматов что IE, во всем its– гм – мудрость, дескрипторы по-другому.

index.html

<head>
<link rel="stylesheet" type="text/css" media="all" href="styles/yui/grids/base-min.css" />
<link rel="stylesheet" type="text/css" media="all" href="styles/yui/grids/grids.css" />
<link rel="stylesheet" type="text/css" media="all" href="styles/screen.foo.css" />
<link rel="stylesheet" type="text/css" media="print" href="styles/print.foo.css" />

<!--[if gt IE 5]> <link rel="stylesheet" type="text/css" href="styles/ie.screen.foo.css" /> <![endif]-->
</head>

9
задан Don Stewart 18 April 2011 в 17:02
поделиться

2 ответа

В Haskell вы не можете перебирать кортеж, как список.

Если в кортеже всего два элемента, вы можете использовать fst для получения первого элемент кортежа и snd , чтобы получить второй элемент.

Один из способов сделать то, что я думаю, вы хотите сделать, это следующий подход:

Prelude> let lst = [(1,2), (3,4)]
Prelude> filter ((==1).fst) lst
[(1,2)]

который возвращает только элементы в списке, где первый элемент равен 1; конечно, вы можете заменить x там, где я поставил 1.

Чтобы быть более конкретным, (== 1) .fst сначала применяется fst к элементу в lst, затем применяет (== 1) к результату fst - технически точка составляет две функции вместе.

]
22
ответ дан 4 December 2019 в 08:01
поделиться

Вы не можете передать аргумент с подстановочным знаком _ в нем оператору == (или любой другой функции). Аргумент должен быть реальным значением, а не шаблоном, с которым следует сравнивать.

Если вы хотите использовать сопоставление с образцом, вы можете использовать лямбда-функцию в качестве фильтрующего условия:

filter (\(a,_) -> a == x) lis

Кроме того, есть предопределенная функция fst для извлечения первого элемента двухэлементного кортежа. Это может быть объединено с == , чтобы выполнить тот же тест:

filter ((== x) . fst)) lis
5
ответ дан 4 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: