Описание тега weak-head-normal-form

2 ответа

Как Haskell оценивает эту функцию простых чисел?

Мне довольно сложно понять, как Хаскелл оценит это primes функция. Это primes Функция оценивается снова и снова, или primes в primeFactors функция укажет на первый primes? primes = 2 : filter ((==1) . length . primeFactors) [3,5..] primeFactors n = …
1 ответ

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

Я не могу объяснить следующее поведение: Prelude> let x = 1 + 2 Prelude> let y = (x,x) Prelude> :sprint y Prelude> y = _ Теперь, когда я указываю тип для х: Prelude> let x = 1 + 2 ::Int Prelude> let y = (x,x) Prelude> :sprint y …
1 ответ

Смущает преобразование WHNF в NF в Haskell

В простом примере преобразование WHNF в NF с помощью печати работает нормально Prelude> let x = 1 + 2 :: Int Prelude> :sprint x x = _ Prelude> x 3 Prelude> :sprint x x = 3 Но в случае, тип не объявлен, он не работает. Prelude> let x =…
28 ноя '18 в 10:24
2 ответа

Почему встроенная функция применяется к слишком небольшому числу аргументов, которые считаются находящимися в нормальной форме со слабой головой?

Определение Хаскелла гласит: Выражение в слабой нормальной форме головы (WHNF), если оно либо: конструктор (в конечном итоге применяется к аргументам), как True, Just (квадрат 42) или (:) 1 встроенная функция применяется к слишком малому количеству …
3 ответа

Haskell складывает плохую производительность с (++)

У меня есть этот код: import Data.List newList_bad lst = foldl' (\acc x -> acc ++ [x*2]) [] lst newList_good lst = foldl' (\acc x -> x*2 : acc) [] lst Эти функции возвращают списки с каждым элементом, умноженным на 2: *Main> newList_bad [1.…
4 ответа

Проверьте, было ли значение оценено как слабая нормальная форма головы

В Haskell, возможно ли проверить, было ли значение оценено как слабая нормальная форма головы? Если функция уже существует, я ожидаю, что она будет иметь такую ​​подпись evaluated :: a -> IO Bool Есть несколько мест, где живет подобный функционал…
9 ответов

Haskell: Что такое нормальная форма слабой головы?

Что означает Нормальная Форма Слабой Головы (WHNF)? Что означает нормальная форма головы (HNF) и нормальная форма (NF)? Реальный мир Haskell утверждает: Знакомая функция seq вычисляет выражение к тому, что мы называем нормальной формой головы (сокра…
1 ответ

Понимание различного поведения thunks, когда GHCi позволяет связывать

Я играл с некоторыми примерами из книги Саймона Марлоу о параллельном и параллельном программировании в Haskell и наткнулся на интересное поведение, которое я не совсем понимаю. Это действительно о том, что я пытаюсь понять некоторые внутренние прин…
1 ответ

Слабая голова, нормальная форма и порядок оценки

Я много читал о слабой голове и нормальной форме. Но мне все еще трудно представить себе логику порядка оценки Хаскелла Общий пример, демонстрирующий, когда и как использовать, но я все еще не понимаю, как общий пример foldl (+) 0 [1..5000000] может…
1 ответ

Уменьшить лямбда-выражения в WHNF

Я должен сократить следующее лямбда-выражение в WHNF, но я не совсем уверен, как это сделать: (λx y. x 3) (+ 4) (+ 6 7) Итак, как мне это сделать? Сокращение числа обращений по имени? Это выражение (другой пример) (λz x. (λx. x) z) x в WHNF еще нет?
1 ответ

Почему Хаскелл считает лямбда-абстракции в нормальной форме слабой головы (WHNF)?

В Хаскеле лямбды считаются в WHNF, в то время как неприменяемые пользовательские функции - нет. Какова была мотивация этого различия?
31 авг '14 в 20:48
1 ответ

Нормальная форма Haskells Weak Head

Я наткнулся на некоторые раздражающие вещи. Я знаю, что haskell работает со слабой нормальной формой головы (WHNF), и я знаю, что это такое. Набираю следующий код в ghci (я использую команду: sprint, которая сокращает выражение до WHNF, насколько мн…
3 ответа

Что на самом деле делает seq в Haskell?

Из Real World Haskell я читал Он работает следующим образом: когда выражение оценивается, оно заставляет вычислить его первый аргумент, а затем возвращает его второй аргумент. На самом деле он ничего не делает с первым аргументом: существует исключи…
2 ответа

Пример строгой оценки из книги Саймона Марлоу «Параллельное и параллельное программирование в Haskell»

Саймон Марлоу в своей книге «Параллельное и параллельное программирование в Haskell» пишет: Операция вставки имела эту строку: putMVar m (Map.insert name number book) Это помещает в MVar неоцененное выражение Map.insert name number book. Если бы мы …