Попробуйте реализовать '' all 'с' 'any' 'в списке haskell. - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь реализовать функцию '' all '' с '' any '', но получаю ошибку. Мой код:

all''' ::  (a -> Bool) -> [a] -> Bool
all''' p xs = not (any''' not (p) xs)

Код java, полученный из книги и работающий:

public boolean forAll(Function<A, Boolean> p) {
return !exists(x -> !p.apply(x));
}

Моя ошибка:

enter image description here

Я надеюсь, что кто-то может мне помочь.

С уважением

1 Ответ

3 голосов
/ 01 мая 2020

Синтаксис приложения функции в Haskell отличается от синтаксиса Java. В Haskell вы применяете функцию, просто помещая ее рядом с аргументом:

f x  -- The function f applied to x

Приложение функции связывается слева, поэтому, когда вы пишете

not (any''' not (p) xs)

, компилятор читает что при применении any''' к функции not, функции p и списку xs, как если бы вы написали

not (((any''' not) p) xs)

, вы хотели написать

all''' p xs = not (any''' (\x -> not (p x)) xs)

Вы можете сократить это немного, используя оператор композиции, .:

all''' p = not . any''' (not . p)

Обратите внимание, что если вы также определите any''' для использования all''', то вы ' в конечном итоге с бесконечным l oop. Возможно, вы хотели определить его для использования «более ранней» версии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...