Цитата lxa85:
Т.к. это не объектно-оринетированное программирование, а функциональное, то и хочется понять (схемку али что) что это за зверь? »
|
Язык функционального программирования, это как раз не Prolog, а Lisp. Prolog - это язык предикатов. Его основное отличие от классических языков программирования состоит в том, что в нем не описывается последовательность действий необходимых для получения результата. Во времена перфокарт любили приводить пример, что в идеале (на практике недостижимом) колоду карт с Prolog-программой можно перетасовать и после этого она должна продолжать работать.
Это было теоретически возможно потому, что область видимости переменных ограничивалась одним предикатом (считайте - одним оператором). Программа на Прологе не содержит вообще никаких частей, описывающих процесс достижения результата. Никаких алгоритмов, никаких функций. Только набор логических утверждений. И логический запрос (goal - цель), ответ на который программа должна дать сама, имея своём распоряжении только набор утверждений из которых и состоит весь текст программы.
Я как-то набросал на Prolog'е программу для игры в крестики-нолики на бесконечной доске (известная игра, чем-то напоминающая японскую "Го") и удивился, что она сразу стала неплохо играть, причем добавление каждого следующего правила (предиката), которым программа должна была руководствоваться рассчитывая очередной ход, существенно улучшало её игру. Правда, одновременно с этим в геометрической прогрессии росло и время на расчет каждого хода...
Понятно, что для написания подобной программы на любом другом языке, включая Lisp, потребовалось бы в несколько раз больше времени (правда и работала бы она на два порядка быстрее).