Вопросы по теме '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 просмотров
schedule
21.08.2022
Можно ли реализовать эту функцию в 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 просмотров
schedule
05.11.2023