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

#haskell

#haskell

Вопрос:

Я пытаюсь отфильтровать a list of 2-tuples , где значение первого кортежа равно 0 :

 ghci> ys
[(0,55),(1,100)]

ghci> filter (x -> x.fst == 0) ys
<interactive>:71:27:
    Couldn't match type `(Integer, Integer)' with `b0 -> c0'
    Expected type: [b0 -> c0]
      Actual type: [(Integer, Integer)]
    In the second argument of `filter', namely `ys'
    In the expression: filter ( x -> x . fst == 0) ys
    In an equation for `it': it = filter ( x -> x . fst == 0) ys
  

Мой желаемый результат:

[(1,100)]

Как я могу этого добиться? Кроме того, что означает ошибка времени компиляции?

Ответ №1:

(.) это композиция функций, которую вы хотите filter (x -> fst x == 0) ys . Редактировать: вы действительно хотите filter (x -> fst x /= 0) ys , потому filter что предоставляет список значений, которые удовлетворяют предикату.

Ошибка времени компиляции вызывает жалобы, потому что компилятор делает вывод, что x это должна быть функция, потому что вы ее составляете fst , но ys это не список функций.

Комментарии:

1. Кстати, это все еще не дает ожидаемого результата.

2. О, вы правы, я просто предположил, что они используют filter правильно. Я это исправлю.