До тех пор, пока переменная не получила какого-либо значения, она называется «свободной».
Когда переменная примет значение, она становится «связанной». Однако она остается связанной только в течение времени, необходимого для получения одного ответа на запрос
После этого Пролог «развязывает» ее, возвращается и ищет альтернативные решения. Это очень важный момент: нельзя хранить информацию, задавая значения переменных. Переменные служат частью процесса сопоставления, а не «хранилищем» информации. Область действия переменной — ровно одно предложение (правило или запрос программы).
Вопрос
отправная точка логического вывода, происходящего при выполнении программы. На любой вопрос компьютер будет пытаться дать ответ «Да» или «Нет» в зависимости от того, согласуется или нет утверждение, стоящее в вопросе, с фактами и правилами базы знаний. Вопрос, не содержащий переменных, является общим: «имеет ли место факт...?».
телефон(иванов,т561532). телефон(петров,т642645). телефон(сидоров,т139833).
|
|
можно поставить вопрос
? - телефон (иванов,Т123456).
ответ будет «Нет», так как константа т123456 не согласуется ни с одним фактом
Вопрос, в котором имеются переменные, является частным: «для каких значений переменных факт... имеет место?». В процессе сопоставлений при выполнениях программы переменные получат значения тех констант (конкретизируются), для которых сопоставление запроса в целом успешно, и они будут выведены на экран.
в ответ на вопрос
? - телефон (иванов,X).
к базе знаний примера 1 на экране появится сообщение
х=т561532 и будет дан ответ «Да».
27. Язык Лисп как представитель семейства языков функционального программирования.
Язык Лисп — один из первых языков обработки данных в символьной форме.
В Лиспе и программа, и обрабатываемые ею данные представляются в одной и той же форме — в форме списка.
Программы могут обрабатывать и преобразовывать другие программы и даже самих себя.
Функциональный подход к программированию
Вся обработка информации и получение искомого результата могут быть представлены в виде вложенных и/или рекурсивных вызовов функций, выполняющих некоторые действия, так что значение одной функции используется как аргумент другой.
Значение этой функции становится аргументом следующей и т.д., пока не будет получен конечный результат — решение задачи.