Ленивое вычисление - Большая Энциклопедия Нефти и Газа, статья, страница 1
Умный мужчина старается не давать женщине поводов для обид, но умной женщине, для того чтобы обидеться, поводы и не нужны. Законы Мерфи (еще...)

Ленивое вычисление

Cтраница 1


Ленивое вычисление соответствует вызову по необходимости и приводит к завершению программы всякий раз, когда оно возможно.  [1]

Ленивое вычисление может быть использовано для минимизации числа просмотров структур данных, но это связано с необходимостью написания сложных программ.  [2]

С помощью последовательно ленивого вычисления, очевидно, нельзя получить ничего похожего на конвейер: каждая величина из входного потока будет обрабатываться каждой функцией из F до того, как начнет обрабатываться следующая величина. Однако список функций обработки потока можно рассматривать как описание физического конвейера процессов, и каждая такая функция могла бы быть реализована на отдельном процессоре. В этом случае возможно получить параллелизм, присущий конвейеру.  [3]

Требуются ли тут все возможности ленивого вычисления.  [4]

В следующем разделе будет описана модификация, требуемая для поддержки ленивого вычисления и, таким образом, определена ленивая семантика. Работа машины каждого типа проиллюстрирована примерами.  [5]

В дальнейшем мы покажем, как эта система может быть обобщена для обеспечения ленивого вычисления Энергичную и ленивую версии SECD-машины часто называют машиной, управляемой данными, и машиной, управляемой запросами, соответственно.  [6]

Как уже было сказано и в чем можно будет убедиться по ходу дальнейшего изложения, поддержка ленивого вычисления является очень дорогой, и для того, чтобы избежать его при реализациях функционального языка, затрачиваются большие усилия всякий раз, когда это возможно. Например, при анализе ленивой функциональной программы часто определяется, что функция, заданная пользователем, является строгой в одном или нескольких своих аргументах. Эти строгие аргументы затем могут передаваться по значению, давая некоторое увеличение эффективности без изменения поведения программы при ленивой реализации. Подобная форма оптимизации, известная как анализ строгости, более детально обсуждается в гл.  [7]

Примеры, которые были здесь рассмотрены, основаны на том, что аргументы функций-конструкторов не вычисляются до тех пор, пока этого не потребуется, и в этом плане их можно рассматривать только в качестве частично использующих ленивое вычисление. Одним из наиболее эффективных применений ленивого вычисления является создание циклических структур, и в этой проблемной области становятся полностью очевидны все его преимущества.  [8]

Примеры, которые были здесь рассмотрены, основаны на том, что аргументы функций-конструкторов не вычисляются до тех пор, пока этого не потребуется, и в этом плане их можно рассматривать только в качестве частично использующих ленивое вычисление. Одним из наиболее эффективных применений ленивого вычисления является создание циклических структур, и в этой проблемной области становятся полностью очевидны все его преимущества.  [9]

Фактически конструкторы ( за исключением, может быть, предварительно определенных конструкторов, таких, как конструктор списков CONS) обычно реализованы как кортежи ( см. гл. Именно по этой причине ленивые конструкторы указаны отдельно в определении ленивого вычисления.  [10]

Тут все очень точно и достаточно ясно, но существует небольшое неудобство, заключающееся в том, что список необходимо просматривать дважды. Однако, используя рекурсивные where - ( или let -) выражения в сочетании с ленивым вычислением, можно проделать ту же самую операцию за один просмотр.  [11]

Когда есть возможность выбрать редекс для преобразования, выбор определяется порядком редукций. Двумя альтернативными стратегиями выбора являются аппликативный порядок редукций и нормальный порядок редукций, тесно связанные с энергичным вычислением и ленивым вычислением соответственно.  [12]

Заметим, однако, что если аргумент в теле функции встречается больше одного раза, то для каждого вхождения аргумента требуется вычисление задержки или применение соответствующего замыкания к пустому параметру. Таким образом, требуется повторное вычисление аргумента всякий раз, когда нам нужно получить его значение, и, следовательно, мы имеем вызов по имени. Чтобы реализовать ленивое вычисление, мы должны реализовать вызов по необходимости. Для этого требуется разделять не только выражения аргументов, но и результаты вычислений этих выражений. Механизмы, реализующие вызов по необходимости, рассмотрены в следующем подразделе.  [13]

Стандартная стратегия Пролога была задумана таким образом, чтобы с учетом относительной простоты ее реализации она давала программисту некоторые возможности управления выбором вызовов и выбором процедур в условиях эксплуатации единственного процессора. Согласно этой схеме активация вызовов управляется потоком данных через содержащиеся в вызовах общие переменные, а не предписанной заранее или неявно заданной управляющей последовательностью. Исполнение в сопрограммном режиме является главной особенностью управления в системе IC-Пролог, описанной Кларком, Маккейбом и Грегори ( 1982) и разработанной на основе предшествующих исследований Стивенса ( 1977) схем ленивого вычисления в Прологе.  [14]

Намеченная выше алгебра программ потребует большой работы для распространения ее на более обширные классы или уравнения и для обобщения ее законов и теорем за рамки приведенных здесь элементарных случаев. Было бы интересна исследовать алгебру для ФП-подобной системы, в которой конструктор последовательности не сохраняет L ( закон 1.5 становится более сильным, но теряется IV. Другие интересные проблемы состоят в том, чтобы ( а) найти правила обеспечения однозначности разложений, задав канонические формы для функций; ( б) найти алгоритмы разложения и анализа поведения функций для различных классов аргументов и ( в) исследовать способы использования законов и теорем алгебры в качестве основных правил либо для схемы формального, умозрительного ленивого вычисления [9, 10], либо для схемы, работающей в процессе выполнения алгоритма.  [15]



Страницы:      1    2