Понимание и использование библиотеки Boost Phoenix с упором на ленивую оценку

Я только что узнал о библиотеке Boost Phoenix (скрытой в проекте Spirit) и как фанат стиля функционального программирования (но все еще любитель; опыт работы с haskell и схемой) я хотел поиграть с этой библиотекой, чтобы узнать о разумных применениях этой библиотеки.

Помимо увеличения выразительности и ясности кода с использованием стиля fp, меня особенно интересует ленивое вычисление для ускорения вычислений при низких затратах.

Небольшим и простым примером может быть следующее: существует какая-то проблема маршрутизации (например, tsp), которая использует евклидову матрицу расстояний. Мы предполагаем, что некоторые значения матрицы расстояний никогда не используются, а некоторые используются очень часто (поэтому не рекомендуется вычислять их на лету для каждого вызова). Теперь кажется разумным иметь ленивую структуру данных , содержащую значения расстояния. Как такое возможно с фениксом? (игнорируя тот факт, что я бы легко обошелся без программирования в стиле fp) Чтение официальной документации по Phoenix не дало мне достаточно понимания, чтобы ответить на этот вопрос.

Возможно ли это вообще? (в Haskell, например, возможность создавать преобразователи, которые гарантируют, что значение может быть вычислено позже, заложена в ядре языка).

Что означает использование вектора со всеми ленивыми функциями, определенными в Phoenix? Каким бы наивным я ни был, я попытался заполнить две матрицы (vector>) случайными значениями, одну с обычным push_back, а другую с boost :: phoenix :: push_back, и попытался прочитать только небольшое количество значений из этих матриц. и храните их в контейнере для распечатки. Ленивый всегда был пуст. Я неправильно использую Phoenix / должно быть возможно? Или я неправильно понял функцию контейнеров / алгоритмов в Phoenix. Небольшой подсказкой для последнего является наличие специальной структуры данных списка в библиотеке FP ++, которая повлияла на Phoenix.

Дополнительно:

  • Для чего вы используете феникса?
  • Знаете ли вы какие-нибудь хорошие ресурсы о фениксе? (учебные пособия, записи в блогах ...)

Спасибо за ваш вклад!

7
задан sascha 3 October 2010 в 11:58
поделиться