Доброго времени суток! Я студентка второго курса МАИ, факультета Прикладной математики.
Недавно наш куратор, Сошников Дмитрий, координатор академических программ департамента стратегических технологий Microsoft, поставил передо мной задачу написать статью на тему: «Как объяснить своей младшей сестре (9 лет) принципы логического программирования?». Вот что из этого вышло.
Здравствуй, любимая сестренка! Сегодня я хочу рассказать тебе, что такое логическое программирование.
Для начала, давай разберемся, что такое программирование и логика сами по себе.
Программист это человек, который занимается программированием, он пишет программы, это своего рода инструкции для компьютера. Он говорит ему, что и как надо сделать.
Так же как и у людей есть разные языки, на которых они говорят, у компьютеров есть языки, на которых пишутся программы. Каждый сам выбирает, на каком языке он будет «разговаривать» с компьютером. Часто выбор языка зависит от того, что мы хотим получить от компьютера.
Логика – это наука о рассуждениях. Одна из главных задач логики — понять, как прийти к выводу из каких-либо рассуждений и получить истинное, правильное знание о том, над чем мы думаем и о чем рассуждаем.
Логическое программирование, это способ создание программ, которые помогают нам что-то выяснить на основе тех фактов, которые мы имеем. Его особенность заключается в том, что мы не говорим компьютеру, как он должен что-то делать. Компьютер должен сам это понять. Мы только пишем правила, по которым он должен это понять. У него есть объекты, есть отношения между ними – он должен их сопоставить. Последовательность прочтения идет строго в том порядке, в котором мы их написали – сверху вниз. Так же, у тебя не ограничения на количество утверждений в твоей программе.
Например, мы напишем:
- Маша – девочка.
- Лена – девочка.
- Девочки дружат.
А компьютер прочитает это все, подумает, и выдаст нам фразу: Маша и Лена подруги. Маша и Лена это объекты, а дружба – это отношение.
Логическое программирование использует такие слова как «если», «и», «или», «не», «равно/не равно». Например, если идет дождь, то надо взять зонтик. Маша идет в кино и берет свою подругу. Мы идем в зоопарк или в кино. Не девочка – мальчик. Пять яблок равно по количеству пяти грушам, а восемь апельсинов уже не равно. Так же, например, можно осуществлять такие вещи как «цикл» — я ем конфеты, пока они не закончатся. Это действие, которое совершается до определенного момента. В нашем случае – пока не закончатся конфеты.
Не всегда вывод результата может быть однозначным, мы имеем возможность получить различные решения нашей задачи.
Например:
- Маша – девочка.
- Денис – мальчик.
- Девочки любят конфеты.
- Девочки любят мультики.
- Мальчики любят грузовики.
- Мальчики любят Звездные войны.
Мы спросим у компьютера: Что любит Маша? И он сможет нам ответить: Маша любит конфеты. А нам, например, не понравился такой ответ. Мы еще раз спросим и получим, что Маша любит мультики. Так же и с Денисом, мы может получить ответ и про грузовики и про Звездные войны. Компьютер помнит, что мы у него спросили и знает, что он еще не ответил.
С помощью логического программирования ты можешь писать игры! Предположим, ты умеешь играть в крестики нолики, а компьютер нет. Ты легко можешь его научить. Для этого надо написать программу, которая путем логических рассуждений будет ставить нолик или крестик в соответствующую клеточку на игровом поле. В зависимости от твоего хода компьютер будет придумывать различные варианты постановки значка. Когда ты станешь взрослее и научишься играть в шахматы, то сможешь обучить им и компьютер. В отличие от крестиков-ноликов, программа для шахмат будет сложнее. Так как там много фигур и много вариантов хода. Но ты справишься, я верю! Если что, ты всегда сможешь написать свою игру, которая тебе нравится. Сама придумаешь персонажей, условия проигрыша и выигрыша, правила игры. Это же так интересно! Ведь вся прелесть логического программирования как раз и состоит в том, что ты можешь сама придумывать объекты и отношения, сама строить их особенности и примеры поведения.
Как я уже говорила, люди говорят на разных языках: английский, французский, русский. Мы с тобой преимущественно разговариваем на русском, а вот основным языком логического программирования является Пролог. Его придумали давным-давно, еще в 70 годах, когда ни тебя, ни меня не было. Когда мы «говорим» на языке Пролог, нам важно соблюдать некоторые правила, как и во всех других языках. Все имена, даже твое, записываются с маленькой буквы. Все отношения тоже записываются с маленькой буквы. В первую очередь, мы записываем отношение, а затем, в скобочках и через запятую, список объектов, которые к нему относятся. И в конце мы всегда ставим точку!
Например:
- дружба(маша, денис).
Это означает, что Маша и Денис дружат. Мы может записывать более сложные предложение, такие как:
pодители(X,Y) :- мужчина(X), женщина (Y).
Большими буквами мы показываем компьютеру, что на их месте может быть что угодно. Что ему будет нужно, то он туда и поставит. Значок «:-» обозначает «если», а запятая слово «и». Значит этот пример мы можем прочитать как «X и Y родители, если X — мужчина, а Y — женщина».
Еще пример:
любить(маша, X) :- кот(X).
кот(пушистик).
кот(вася).
хомяк(шарик).
Мы описываем условие «Маша любит X, если Х это кот». Мы спросим у компьютера: Маша любит Пушистика? Компьютер ответит да, ведь мы написали, что Пушистик кот. А если мы спросим, любит ли Маша Шарика, то компьютеру придется ответить «Ложь». Ведь Шарик, к сожалению, хомяк, а условия любви к хомякам у нас нет.
После завершения программы на Пролог (после поиска решения) могут возникнуть только два состояния «Правда» и «Ложь». К сожалению, язык пролог не знает фразы «Я не знаю». Если он не смог найти ответа на наш вопрос, то он напишет «Ложь». Так же он выводит «Ложь», когда у него закончились варианты ответов на наш вопрос.
Если тебе очень лень посчитать что-то в уме, то Пролог может помочь тебе справится с арифметическими вычислениями. Если ты напишешь «X is 3+2.», то он даст тебе ответ «5». «Is» как бы присваивает тому, что слева, то, что справа. Точно так же ты можешь умножать, делить или вычитать.
В Прологе ты можешь очень легко составить какой-нибудь список. Например, список твоих игрушек. Он будет заключен в такие скобки «[…]».
[мишка, мячик, барби, крокодил, грузовик, телефон].
С ним ты теперь можешь делать очень много различных вещей! Можешь отсортировать игрушки по алфавиту, можешь убрать свою нелюбимую, можешь склеить его со списком игрушек своей подруги из класса и вы получите общий список ваших игрушек. Если игрушек очень много, то Пролог сможет узнать, есть ли в списке какая-то определенная игрушка, а то вдруг ты забыла её туда написать. Можно узнать количество всех твоих игрушек, Пролог обязательно посчитает их!
Если ты захочешь, то сможешь сама придумать задание для Пролога, которое он совершит со списком твоих игрушек. Твои возможности в этом плане не ограничены, придумывай все, что захочешь! Например, ты можешь посчитать, сколько мячиков или кукол в твоей коллекции. Импровизируй!
Надеюсь, что тебе понравился мой рассказ про логическое программирование, и ты обязательно захочешь создать какую-нибудь программу своими руками. Не бойся пробовать и узнавать что-то новое! Представь что программа это пластилин, из которого ты можешь слепить все что пожелаешь. Ты всегда имеешь возможность изменить его форму или придумать новые детали.
Автор: SashaVesna