Срывание (&&) в Haskell

Смотрите на Рациональное Сканирование Приложения (раньше назывался Watchfire). Не свободный, но имеет хороший UI, мертв мощный, генерирует отчеты (сделанный на заказ и против стандартных платформ соответствия, таких как Basel2), и я полагаю, что можно написать сценарий его в сборку CI.

18
задан nbro 13 March 2017 в 19:11
поделиться

3 ответа

Следует замкнуть накоротко, как и в других языках. В Prelude это определено так:

(&&)                    :: Bool -> Bool -> Bool
True  && x              =  x
False && _              =  False

Итак, если первый параметр имеет значение False, второй никогда не нужно оценивать.

20
ответ дан 30 November 2019 в 08:27
поделиться

Like Martin said, languages with lazy evaluation never evaluate anything that's value is not immediately needed. In a lazy language like Haskell, you get short circuiting for free. In most languages, the || and && and similar operators must be built specially into the language in order for them to short circuit evaluation. However, in Haskell, lazy evaluation makes this unnecessary. You could define a function that short circuits yourself even:

scircuit fb sb = if fb then fb else sb

This function will behave just like the logical 'or' operator. Here is how || is defined in Haskell:

True  || _ = True
False || x = x

So, to give you the specific answer to your question, no. If the left hand side of the || is true, the right hand side is never evaluated. You can put two and two together for the other operators that 'short circuit'.

5
ответ дан 30 November 2019 в 08:27
поделиться

Ленивая оценка означает, что ничего не оценивается до тех пор, пока она действительно не понадобится.

1
ответ дан 30 November 2019 в 08:27
поделиться
Другие вопросы по тегам:

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