Главная » Статьи для тега "функции"

Работа с последовательностями

Добавлено Дата: 9 February, 2011 категория: XSLT

Задача

Вы хотите манипулировать наборами произвольных узлов и атомарных зна­чений, взятых из одного или нескольких XML-документов.

Решение

XPath 1.0

В версии XPath 1.0 нет понятия последовательности, а потому приведенные ниже рецепты к ней как правило неприменимы. В XPath 1.0 есть наборы узлов. Вот идиоматический способ сконструировать пустой набор узлов в XPath 1.0:

Читать »

Локальные функции

Добавлено Дата: 6 February, 2011 категория: Алгоритмы

Локальной или вложенной называется процедура или функция, описанная внутри другой процедуры (функции). Она может иметь свои локальные пе­ременные, а может и обращаться к переменным функции, внутри которой она описана. Вызывать ее можно только из функции, внутри которой она описана, т. е. область видимости ограничена родительской функцией.

Читать »

Функции регистрации и модификации Web-службы

Добавлено Дата: 31 January, 2011 категория: Java, Web, XML

Функции Publish API регистрируют, добавляют, изменяют и удаляют информацию в реестре UDDI, а также выдают служебную информацию о зарегистрированных Web-службах. Перечислим эти функции.

•          Функция save business регистрирует новые элементы <businessEntity> — аргументы функции, или изменяет существующие элементы.

Читать »

Ханойские башни

Добавлено Дата: 28 January, 2011 категория: Алгоритмы

Имеется 3 стержня: А, В и С. На стержень А нанизано п дисков так, что диск с меньшим диаметром всегда лежит поверх диска с большим. Говоря другими словами, на стержне А пирамида из дисков, сужающаяся вверх. Требуется переместить все диски на стержень В. Стержень С можно исполь­зовать в качестве вспомогательного. Основное условие состоит в том, что диск с большим диаметром не должен находиться поверх диска с меньшим.

Читать »

Вычисление сумм и произведений

Добавлено Дата: 25 January, 2011 категория: XSLT

Задача

Требуется вычислить сумму или произведение чисел, содержащихся в наборе узлов.

Решение

XSLT 1.0

Абстрактная форма алгоритма суммирования для процессоров, оптимизиру­ющих хвостовую рекурсию, выглядит следующим образом:

Читать »

Использование встроенных расширений Saxon и Xalan

Добавлено Дата: 23 January, 2011 категория: XSLT

Задача

Вы хотите воспользоваться какими-то полезными расширениями, реализо­ванными в этих популярных процессорах XSLT.

Решение

XSLT 1.0

Этот рецепт разбит на ряд мини-рецептов, иллюстрирующих применение наиболее интересных расширений в Saxon и Xalan. Во всех примерах префикс saxon ассоциирован с пространством имен http://icl.com/saxon, а префикс xalan – с http://xml.apache.org/xslt.

Читать »

Обобщенное и функциональное программирование – Введение

Добавлено Дата: 15 January, 2011 категория: XSLT

Эта глава оспаривает все, что было написано в предыдущих. Ладно, это все- таки небольшое преувеличение. Речь идет о том, что во всех рассмотренных выше примерах решается та или иная конкретная задача. Полезны они и в учебных целях. Если в примере описывается не точно та задача, с которой вы столкнулись, то он все же может подсказать, в каком направлении двигаться. Возможно, достаточно будет слегка модифицировать приведенное решение или применить аналогичную технику.

Читать »

Генерация функций форматированной печати

Добавлено Дата: 15 January, 2011 категория: XSLT

Задача

Необходимы инструменты для отладки приложения. В частности, хотелось бы иметь возможность распечатывать двоичные сообщения в форме, понятной человеку.

Решение

При разработке приложений, обрабатывающих сообщения, программисты ча­сто вручную пишут функции для их распечатки, поскольку это заметно упрощает отладку. Однако при наличии репозитория сообщений такой код можно сгенери­ровать автоматически. В этом решении показано, как можно повторно использо­вать генератор предложения switch из рецепта 12.2.

Читать »

Преобразование простых именованных шаблонов в функции XSLT

Добавлено Дата: 12 January, 2011 категория: XSLT

Задача

В XSLT 1.0 не было поддержки для написания функций, а именованные шаб­лоны – не слишком удачная замена.

Решение

Если нужно всего лишь вычислить результат, а не породить новое сериализо- ванное содержимое, отдавайте предпочтение функциям XSLT 2.0. Ниже приведе­ны разнородные примеры ситуаций, когда функции гораздо удобнее именован­ных шаблонов:

Читать »

Реализация стандартных математических функций

Добавлено Дата: 10 January, 2011 категория: XSLT

Задача

Требуется выйти за пределы математики для пятого класса, но в XSLT необ­ходимых средств нет.

Решение XSLT 1.0

Ниже предлагаются реализации на языке XSLT 1.0 функций для вычисления абсолютного значения, квадратного корня, логарифмов, степенной функции и фак­ториала.

Читать »

Проще некуда (оценочная функция)

Добавлено Дата: 7 January, 2011 категория: Игры, Теория

Если вы не можете настроить оценочную функцию, или не хватает опыта программирования, или просто нет времени для написания и отладки большой программы, а написать все-таки хочется, могу предложить про­стейшую схему. Уровень игры ее я затрудняюсь определить, но любителю, не перехаживая, выиграть будет затруднительно. В этой программе нет списка фигур, генератор перемещений совмещен с функцией счета, а оценочная функция отсутствует как таковая — вся оценка вычисляется динамически. Программа считает на пять полуходов с полным перебором, а дальше — упрощенный выборочный поиск, по существу, играющий роль оценочной функции. Данная программа опровергает все классические каноны шахмат­ного программирования, она не считает точно, а некоторым образом про­гнозирует ситуацию.

Читать »

Обработка неструктурированного текста с помощью регулярных выражений

Добавлено Дата: 30 December, 2010 категория: XSLT

Задача

Требуется преобразовать XML-документ, содержащий фрагменты неструкту­рированного текста, которые должны быть надлежащим образом размечены.

Решение

Для работы с регулярными выражениями в XSLT 2.0 есть три функции: match(), replace() и tokenize(). Мы рассматривали их в главе 1. Появилась также новая команда xsl:analyze-string(), которая позволяет обрабатывать текст еще более интересными способами.

Читать »

MiniMax и NegaMax

Добавлено Дата: 16 December, 2010 категория: Алгоритмы, Игры

Стратегия поиска лучшего хода была описана еще Клодом Шенноном. Впрочем, она очевидна, и любой человек, знакомый с программированием и рекурсией, может вывести ее самостоятельно. Коротко о рекурсии. Рекур­сия — это когда функция вызывает сама себя, и каждый раз при входе в функцию в стеке программы создается новая копия блока переменных. Это не относится к статическим переменным, общим для всех вызовов функ­ции, просто, если они описаны в теле функции, их область видимости ог­раничена данной функцией. Чем же так примечательна рекурсия? Она по­зволяет описать некоторые процессы, просто определив законы их разви­тия, а как конкретно будет развиваться алгоритм, не так уж и важно. Главное, мы задаем его параметры развития, и совершенно очевидно, что он работает. Формальные доказательства нас в данном случае не интересу­ют. Некоторые задачи, легко решаемые с помощью рекурсии, часто невоз­можно или сложно решить другими способами. Это же относится к поиску лучшего хода. Допустим, у нас есть некоторая воображаемая игра, где на доске (размеры которой не важны), ходят белые и черные фигуры. Есть правила игры, и фигуры им подчиняются. Эта игра может быть шахматами, шашками, уголками и т. д. Алгоритма лучшего хода мы не знаем. Как же нам найти если не лучший, то хоть осмысленный ход? Предположим, у нас уже есть функция, дающая оценку каждому ходу. Устройства этой функции мы не знаем, но можем ей пользоваться и оценивать каждый ход. Как же нам для некоторой позиции в игре найти лучший ход? Очевидно, надо по­лучить все перемещения, сделать оценку каждого из них и найти перемеще­ние с максимальной оценкой. Рассмотрим некоторый код в листинге:

Читать »