Начало серии Хаскель-куча В этой статье мы остановимся на ты .
Вы продолжаете торчать вокруг стопки Haskell и пытаетесь открыть подарок.
Ведь подарки не открываются сами по себе.
Кто-то должен открыть первый подарок.
Если куча Haskell не взаимодействует с внешним миром, то подарки открывать не нужно.
Следовательно, это будут делать только функции ввода-вывода.
Не всегда очевидно, какой именно подарок откроет функция.
Итак, давайте посмотрим на самый простой оценивать .
Который тебя спрашивает.
.
просто откройте подарок.
Если у вас примитивный смысл, то все.
Но вы можете получить подарочный сертификат (конструктор):
Будете ли вы открывать подарки на его основе? Несмотря на ваше горячее желание, ответ — нет. оценивать просит открыть только один подарок.
А если он уже открыт, то вообще ничего делать не нужно.
Совет: если вы хотите узнать больше, создайте подарок с духом, который сделает всю работу за вас! Часто приводят такой пример ленивых вычислений ввода-вывода: оценить (длина xs) .Хотя мы открываем только один подарок, может случиться многое.Но не волнуйтесь слишком сильно, если вы еще этого не понимаете: я еще не рассказал вам, как создавать подарки!
Об этом я писал в предыдущей статье.
Может возникнуть некоторый IO (побочный эффект).
Побочные эффекты позволяют подсмотреть порядок вычислений.
Ведь если мы запустим программу обычным способом, мы не увидим, когда подарок будет открыт. Но если мы попросим дух кричать, когда его потревожат, то мы об этом узнаем.
На самом деле, это именно то, что он делает Debug.Trace !
Есть и другие способы узнать, как идут расчеты.
Подарок может взорваться, если его заминировать.
Шахты еще называют «дном» (логическое противоречие).
Возможно, взрыв был вызван неопределенный или ошибка "Фубар" .
Бум.
Закончим несколькими практическими советами.
Как мы видели, быть уверенным в том, что подарок открыт, можно только в том случае, если вы явно запросите его в IO. В противном случае дух может вас обмануть.
Ведь вы не можете напрямую видеть связка Хаскеля, поэтому прямого способа узнать открыт подарок или нет нет.
Если вы не уверены, что thunk оценивается, прикрепите к нему трассировку.
А если духи ленятся за вашей спиной, то розыск не получится.
Но чаще всего след вы все равно увидите, пусть и позже, чем ожидалось (духи ленивы, но свое дело со временем сделают).
Может быть полезно досрочно выйти из программы или распечатать завершенные этапы расчетов.
Последний раз: Вычисление кучи Haskell В следующий раз: Реализация кучи Haskell в Python, v1 Комментарий.
Вопреки тому, что я сказал ранее, теоретически ничто не мешает вам выполнять переходы в куче в любом порядке: это называется умозрительный расчет .
Кроме того, сами действия ввода-вывода могут быть преобразователями, что соответствует передаче значения ( ИО а ) без фактического «запуска» его.
Но поскольку я здесь не ради монад, я просто не буду обращать внимание на подарки от ИО действия — там все работает так же, только добавляется еще один уровень косвенности.
Наконец, бесконечные циклы тоже считаются нижними, но картина открытия подарка, продолжающегося до конца времени, не так захватывающа, как взрыв взрывающегося подарка.
Теги: #haskell #heap #ленивое выполнение #ghc #haskell #heap #ленивые вычисления #haskell
-
Куайн, Уиллард Ван Орман
19 Oct, 24 -
Microsoft Верит В Календарь Майя
19 Oct, 24 -
Видео С Конференции Scaladev
19 Oct, 24 -
Hd Tracker.ru И День России!
19 Oct, 24 -
Эти Люди Меня Удивляют
19 Oct, 24