1.2. Вопросы
1.2. Вопросы
Имея некоторую совокупность фактов, мы можем обращаться к Прологу с вопросами о них. В Прологе вопрос записывается почти так же, как и факт, за исключением того, что перед ним ставится специальный символ. Специальный символ состоит из вопросительного знака и следующего за ним тире. Рассмотрим вопрос:
?- имеет(мэри, книга).
Если мы интерпретируем мэри как человека по имени Мэри, а книга - это какая-то конкретная книга, то смысл вопроса в следующем: «Имеет ли Мэри (данную конкретную) книгу?» или «Имеет ли место факт, что Мэри имеет данную книгу?». Мы не спрашиваем, имеет ли она все книги или книги вообще.
Обращение к Прологу с вопросом инициирует процедуру поиска в базе данных, ранее введенной в систему. Пролог ищет факты, сопоставимые с фактом о вопросе. Два факта сопоставимы (или соответствуют один другому), если их предикаты одинаковы (побуквенное совпадение) и их соответствующие аргументы попарно совпадают. Если Пролог находит факт, сопоставимый с вопросом, то он отвечает да[3]. Если в базе данных такого факта не существует, то Пролог отвечает нет. Ответ, выдаваемый Прологом, выводится на дисплей терминала непосредственно под запросом. Пусть имеется следующая база данных:
нравится(джо,рыба).
нравится(джо,мэри).
нравится(мэри,книга).
нравится(джо,книга).
Если все эти факты введены в Пролог-систему, то можно было бы делать следующие вопросы, ответы на которые Пролог написал бы непосредственно под текстом вопроса:
?- нравится(джо,деньги).
нет
?- нравится(мэри,джо).
нет
?- нравится(мэри,книга).
да
?- король(джон,франция).
нет
Ответы на три первых вопроса должны быть понятны. Кроме этого, Пролог отвечает нет на вопрос о том, является ли Джон королем Франции. Система выдает такой ответ, так как среди фактов в базе данных, представленной приведенными выше четырьмя отношениями нравится, нет отношений, указывающих на королевские звания. В Прологе ответ нет используется в смысле ничто в базе данных не согласуется с вопросом. Важно помнить, что ответ нет вовсе не эквивалентен ответу является ложным. Предположим, например, что база данных содержит три факта об известных мыслителях Греции:
человек(сократ).
человек(аристотель).
афинянин(сократ).
Можно было бы сделать несколько вопросов:
?- афинянин(сократ).
да
?- афинянин(аристотель).
нет
?- грек(сократ).
нет
Хотя тот факт, что Аристотель жил когда-то в Афинах, может быть исторически верным, мы просто не можем доказать его на основе фактов, представленных в базе данных. Более того, хотя в базе данных содержится факт о том, что Сократ жил в Афинах, это не доказывает того, что он был греком, если только в базе данных нет дополнительной информации. Таким образом, когда Пролог на вопрос отвечает нет, это значит не доказуемо, не согласуется с базой данных.
В приведенном ранее примере Джону и Мэри нравится один и тот же объект. Мы знаем, что им нравится один и тот же объект, так как одно и то же имя книга появляется в обоих фактах.
Обсуждавшиеся до сих пор факты и вопросы не представляют большого интереса. Все что мы можем сделать – это получить обратно ту же самую информацию, которую мы ввели в систему. Более полезны были бы вопросы вида: «Какие объекты нравятся Мэри?». Именно для реализации такой возможности предназначены переменные.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
1.2. Вопросы
1.2. Вопросы Имея некоторую совокупность фактов, мы можем обращаться к Прологу с вопросами о них. В Прологе вопрос записывается почти так же, как и факт, за исключением того, что перед ним ставится специальный символ. Специальный символ состоит из вопросительного знака и
Вопросы и ответы
Вопросы и ответы В среде Visual Studio .NET и программе SQL Server Enterprise Manager совпадают многие инструменты. Какие из них предпочтительнее использовать?Ответ прост: какие хотите. Для выполнения многих операций в среде Visual Studio .NET и программе SQL Server Enterprise Manager предусмотрены совершенно
Вопросы и ответы
Вопросы и ответы К каким базам данных можно осуществлять доступ с помощью технологии ASP.NET?Технология ASP.NET обладает той же совместимостью с другими базами данных, что и технология ADO.NET, т.е. для любого источника данных, совместимого с ADO.NET, в ASP.NET предлагаются те же
Вопросы
Вопросы 1. Определите значение переменной quack после выполнения каждого оператора из приведенной ниже их последовательности. int quack = 2; quack + = 5; quack * = 10; quack - = 6; quack / = 8; quack % = 3;2. Что будет получено на выходе в результате работы следующего
Вопросы
Вопросы 1. Напишите функцию, возвращающую сумму двух целых чисел.2. Какие изменения должны были бы произойти с функцией из вопроса 1, если вместо целых складывались бы два числа типа float?3. Напишите функцию alter( ), которая берет две переменные х и у типа int и заменяет
Вопросы
Вопросы 1. Что может сделать наш алгоритм сортировки неэффективным?2. Как следует изменить нашу программу сортировки, чтобы она сортировала и по рядке возрастания, а не убывания?3. Измените функцию print( ) таким образом, чтобы она печатала по 5 чисел в строке.4. Как следует
Вопросы
Вопросы 1. Ниже приведены группы операторов, содержащих по одному и более макроопре делений, за которыми следуют строки исходных кодов, использующих эти макро определения. Какой результат получается в каждом случае? Правилен ли он?a. #define FPM 5280 /* футов в миле */dist = FPM * miles; б.
Вопросы
Вопросы 1. Что напечатается в результате работы этой программы? #define PC(X, Y)printf(" %с %c ", X, Y)char ref[ ] = { D, О, L, Т};main( ){char *ptr;int index;for(index =0; ptr = ref; index < 4; index++, ptr++) PC(ref[indcx], *ptr);}2. Почему в вопросе 1 массив ref описан до оператора main( )? 3. Определите значение *ptr и *(ptr + 2) в каждом
Вопросы
Вопросы 1. Что неправильно в этом шаблоне? structure {char itible;int num [20];char *togs;};2. Вот фрагмент программы; что она напечатает? struct house { float sqft; int rooms; int stories; char *address; };main ( ) {static struct house fruzt = { 1560.0, 6, 1, " 22 Spiffo Road";struct house *sign;sign = &fruzt;printf(" %d %d " , fruzt.rooms, sign-> stories);printf(" %s ",
Вопросы
Вопросы 1. Что неправильно в этой программе? main( ){ int *fp;int k;fp = fopen("желе");for(k = 0; k < 30; k++)fputs(fp, "Нанетта ест желе.");fclose("желе");}2. Что будет делать следующая программа? #include <stdio.h>#include <ctype.h>main(argc, argv)int argc;char *argv[ ];{ int ch;FILE *fp;if((fp=fopen(argv[1], "r")) == NULL)exit(1);while((ch=getc(fp)) != EOF) if(isdigit(ch))
Вопросы
Вопросы Приведенное выше определение послужит отправной точкой для обсуждения ОО-метода. Оно не только дает ответ на некоторые относящиеся к ОО-проектированию вопросы, но и побуждает задать много новых вопросов таких, как: [x]. Как находить релевантные типы объектов? [x].
Вопросы, вопросы…
Вопросы, вопросы… Какая политика твоей библиотеки? нужно ли авторское право в том виде которое есть? какую культорологическую роль библиотека Мошкова играет? нужны ли в стране (может быть в мире) подобные библиотеки? Может ли быть подобное на Западе?Политика — брать все