|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[131] Кроме того, как всем известно, (может-замещать (администрация секретарь) (администрация большая шишка)) Простые запросы Язык запросов дает пользователям возможность извлекать информацию из базы данных, формулируя запросы в ответ на приглашение системы. Например, чтобы найти всех программистов, можно сказать ;;; Ввод запроса: (должность ?x (компьютеры программист)) Система выведет следующие результаты: ;;; Результаты запроса: (должность (Хакер Лиза П) (компьютеры программист)) (должность (Фект Пабло Э) (компьютеры программист)) Входной запрос указывает, что мы ищем в базе данных записи, соответствующие некоторому образцу (pattern). В этом примере образец указывает, что запись должна состоять из трех элементов, из которых первый является символом должность, второй может быть чем угодно, а третий представляет собой список (компьютеры программист). «Что угодно», которое может стоять на второй позиции в искомом списке, изображается переменной образца (pattern variable) ?x. В общем случае переменная образца - это символ, который мы считаем именем переменной, предваряемый знаком вопроса. Несколько позже мы увидим, почему имеет смысл давать переменным образца имена, а не просто ставить в образцы ?, означающее «что угодно». Система отвечает на простой запрос, выводя все записи в базе данных, соответствующие введенному образцу. В образце может содержаться более одной переменной. Например, (адрес ?x ?y) выводит адреса всех служащих. В образце может совсем не быть переменных. В этом случае запрос просто проверяет, содержится ли запись в базе. Если да, будет одна подходящая под образец запись; если нет, ни одной. Одна и та же переменная может встречаться в образце в нескольких местах, и это означает, что одинаковое «что угодно» должно встретиться в каждом из этих мест. Ради этого переменным и даются имена. Например, (начальник ?x ?x) находит всех сотрудников, которые сами себе начальники (впрочем, в нашей пробной базе таковых не имеется). Запросу (должность ?x (компьютеры ?type)) соответствуют все записи о должностях, в которых третий элемент является двухэлементным списком, а первый элемент в нем компьютеры: (должность (Битобор Бен) (компьютеры гуру)) (должность (Хакер Лиза П) (компьютеры программист)) (должность (Фект Пабло Э) (компьютеры программист)) (должность (Поправич Дайко) (компьютеры техник)) Этому образцу не соответствует запись (должность (Дум Хьюго) (компьютеры программист стажер)) поскольку третий элемент здесь является списком из трех элементов, а третий элемент образца указывает, что элементов должно быть два. Если бы нам захотелось изменить образец так, чтобы третий элемент мог быть любым списком, который начинается с компьютеры, мы могли бы написать62 (должность ?x (компьютеры . ?type)) Например, (компьютеры . ?type) соответствуют данные (компьютеры программист стажер) причем ?type равняется списку (программист стажер). Тому же образцу соответствуют данные (компьютеры программист) где ?type равняется списку (программист) , и данные (компьютеры) где ?type равняется пустому списку () . Можно следующим образом описать обработку простых запросов в нашем языке: •Система находит все присваивания переменным в образце запроса, которые удовлетворяют (satisfy) запросу - то есть, все наборы значений переменных, такие, что если переменные образца конкретизуются (are instantiated), то есть замещаются, своими значениями, то результат находится в базе данных. •Система отвечает на запрос, перечисляя все конкретизации образца с удовлетворяющими ему присваиваниями переменным. Заметим, что в случае, когда образец не содержит переменных, запрос сводится к выяснению, находится ли образец в базе. Если да, то нулевое присваивание, не сообщающее значений никаким переменным, удовлетворяет запросу к текущей базе данных. Упражнение 4.55. Постройте простые запросы, которые извлекают из базы данных следующую информацию: a.Все сотрудники, начальником которых является Бен Битобор. b.Имена и должности всех работников бухгалтерии. c.Имена и адреса всех сотрудников, живущих в Сламервилле. 62Здесь используется точечная запись, введенная в упражнении 2.20. Составные запросы Простые запросы являются элементарными операциями языка запросов. Чтобы порождать составные операции, язык предоставляет средства комбинирования. Один из элементов, превращающих язык запросов в язык логического программирования - то, что средства комбинирования запросов отражают средства комбинирования, используемые при построении логических выражений: and (и), or (или) и not (не). (Здесь and, or и not - это не элементарные выражения Лиспа, а операции, встроенные в язык запросов.) Мы можем найти адреса всех программистов с помощью and так: (and (должность ?person (компьютеры программист)) (адрес ?person ?where)) Получаем на выводе (and (должность (Хакер Лиза П) (компьютеры программист)) (адрес (Хакер Лиза П) (Кембридж (Массачусетс Авеню) 78))) (and (должность (Фект Пабло Э) (компьютеры программист)) (адрес (Фект Пабло Э) (Кембридж (Эймс Стрит) 3))) В общем случае, запросу (and (запросу) ••• (запроси)) удовлетворяют все наборы значений переменных образца, которые одновременно удовлетворяют (запросу) ... (запросу!). Как и в случае с простыми запросами, система при обработке составного запроса находит все присваивания переменным образца, удовлетворяющие запросу, и затем печатает все конкретизации запроса этими значениями. Другой метод построения составных запросов - через or. Например, (or (начальник ?x (Битобор Бен)) (начальник ?x (Хакер Лиза П))) найдет всех сотрудников, над которыми начальствует Бен Битобор или Лиза П. Хакер: (or (начальник (Хакер Лиза П) (Битобор Бен)) (начальник (Хакер Лиза П) (Хакер Лиза П))) (or (начальник (Фект Пабло Э) (Битобор Бен)) (начальник (Фект Пабло Э) (Хакер Лиза П))) (or (начальник (Поправич Дайко) (Битобор Бен)) (начальник (Поправич Дайко) (Хакер Лиза П))) (or (начальник (Дум Хьюго) (Битобор Бен)) (начальник (Дум Хьюго) (Хакер Лиза П))) В общем случае, запросу (or (запрос) ••• (запросп)) |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||