Вопросы по теме 'strictness'

Почему карта не требует строгости, а zipWith делает?
Есть две строгие версии функции zipWith: 1) Действительно строго, элементы списков l1 и l2 оцениваются, поэтому их преобразователи не занимают все пространство стека (код Дона Стюарта) zipWith' f l1 l2 = [ f e1 e2 | (e1, e2) <- zipWith k l1...
836 просмотров
schedule 12.03.2022

Пример снижения производительности из-за использования строгих конструкторов данных
Я читаю о строгих конструкторах данных . В связанной статье Wiki говорится, что «аннотации строгости могут ухудшить производительность [потому что] аннотация строгости заставляет компилятор убедиться, что поле полностью вычислено перед...
97 просмотров
schedule 10.04.2024

Можно ли определить pseq в терминах seq?
Насколько я знаю, seq a b оценивает (форсирует) a и b перед возвратом b . Это не гарантирует, что a оценивается первым. pseq a b сначала оценивает a , затем оценивает/возвращает b . Теперь рассмотрим следующее: xseq a b = (seq...
261 просмотров
schedule 14.02.2024

Как seq может оценить бесконечный список в Haskell?
Говорят, что функция Haskell seq принудительно вычисляет свой первый аргумент и возвращает второй. Он используется для добавления строгости к оценке выражений. Итак, как следующее может просто вернуть 5: seq [1..] 5 Разве он не должен...
149 просмотров

Можно ли реализовать эту функцию в Haskell?
На странице https://en.wikibooks.org/wiki/Haskell/Denotational_semantics#Pattern_Matching есть следующее упражнение: Рассмотрим функцию or двух логических аргументов со следующими свойствами: or ⊥ ⊥ = ⊥ или Истина ⊥ = Истина или ⊥...
145 просмотров
schedule 31.03.2022

Как работает вычисление в Haskell для выражений с ограничениями
Предположим, я пишу в GHCi: GHCi> let x = 1 + 2 :: Integer GHCi> seq x () GHCi> :sprint x GHCi печатает x = 3 как и ожидалось. Однако, GHCi> let x = 1 + 2 GHCi> seq x () GHCi> :sprint x дает x = _...
58 просмотров