Итак, я читал руководство Haskell онлайн и просто интересовался комбинацией операторов инфикса и фильтра.Путаница на частично применяемых операторах инфикса
Скажите у вас есть функция, как
filter (>5) [6, 10, 5]
Это будет возвращать [6,10], который, кажется, как интуитивный способ фильтр должен работать.
Однако, делая
filter ((>) 5) [6, 10, 5]
возвращает пустой список (это по-прежнему имеет смысл, (>) проверяет, является ли ее первый аргумент больше второго аргумента).
Однако, фильтр обычно определяется что-то вроде
filter :: (a -> Bool) -> [a] -> [a]
filter _ [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs
Когда система типов знает, что это имеет оператор инфиксный, являются большинство из этих инфиксных операторов, написанных таким образом, что частично применяются функция должна ведущий аргумент к оригиналу префикс? т.е. это инфикс> определяется как что-то вроде (разделывали синтаксис)
infix> :: Int -> Int-> Bool
infix> x y = (>) y x
x infix> y = (>) x y
Извините, если этот вопрос не имеет смысла, я чувствую, что я что-то основное в отсутствии как точки вычисляются, когда р является частично приложенным инфикс оператор.
спасибо. Это очищает источник путаницы для меня. Таким образом, разделы представляют собой, по существу, синтаксические конструкции удобства, которые сопоставляют аргументы с правильной стороной оператора инфикса? – Saedeas
@Saedeas: Это точно. –