#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
правильно. Я это исправлю.