... Ранее мы уже познакомились с частью логики, называемой исчислением высказываний . ... Хранят программы на языке Пролог в текстовых файлах, чаще всего имеющих расширение pl , например, example1.pl . ... При использовании первого варианта в квадратных скобках записывается имя файла (без pl ), например, ?- [example1]. ... Второй способ состоит в вызове встроенного предиката consult , которому в качестве аргумента передается имя файла (также без расширения), например: ?- consult(example1). ...
Программа на языке Пролог обычно описывает некую действительность. Объекты (элементы) описываемого мира представляются с помощью термов. Терм интуитивно означает объект. Существует 4 вида термов: атомы, числа, переменные и составные термы . ... В Прологе атом представляется последовательностью букв нижнего и верхнего регистра, цифр и символа подчеркивания '_', начинающейся со строчной буквы. Кроме того, любой набор допустимых символов, заключенный в апострофы, также является атомом. ...
... В разговорной речи под фактом понимается нечто вроде "Сегодня солнечно" или "Васе 10 лет". ... Гораздо удобнее использовать параметризованные факты, работу с которыми поддерживает логика предикатов. ... База данных на Прологе - это совокупность фактов. ... Составим базу данных из следующих фактов: "слон больше, чем лошадь", "лошадь больше, чем осел", "осел больше, чем собака" и "осел больше, чем обезьяна": больше(слон, лошадь). больше(лошадь, осел). больше(осел, собака). больше(осел, обезьяна). ...
... С помощью запросов можно "спрашивать" базу данных о том, какие утверждения являются истинными. ... Они допускают лишь два возможных ответа: "Yes" означает наличие соответствующего факта в базе данных (первый запрос примера, приведенного ниже), "No" - его отсутствие (второй запрос). ... Загрузите в Пролог базу данных "Цвет" (файл task1.pl ) и сформулируйте к ней следующие запросы. а) Машина красного цвета? . ... Сформулируйте запросы к измененной базе данных. а) Какого цвета машина? . ...
Унификация есть основной механизм обработки запросов в логическом программировании. ... 1) Переменная унифицируется с атомом или составным термом. ... X=коля. X=коля Yes 2) Переменная унифицируется с переменной , при этом они обе становятся как бы одной и той же переменной. ... X = борис Yes ?- дедушка(борис, Y)=отец(X). ... Термы больше(Х, собака) и больше(осел, собака) унифицируются, потому что переменная X может быть конкретизирована атомом осел : ?- больше(Х,собака) = больше(осел,собака). ...
Кроме фактов программы на языке Пролог могут содержать правила , позволяющие получать дополнительные знания о том мире, который описывает программа. ... Правило, определяющее отношение ребенок/2 через отношение отец/2 , запишется следующим образом: ребенок(X, Y) :- отец(Y, X). ... Определим отношение мать/2 через отношения родитель/2 и женщина/1 следующим образом: матерью X для человека Y является его родитель женского рода. мать(X, Y) :- родитель(X, Y), женщина(X). ... X=анна Y=юлия Yes ?- мать(X). ...
Рекурсия в большинстве языков программирования - это такой способ организации обработки данных, при котором программа (процедура) вызывает сама себя непосредственно, либо с помощью другой программы (процедуры). ... Пусть имеются следующие факты: больше(слон, лошадь). больше(лошадь, осел). больше(осел, собака). больше(осел, обезьяна). ... Однако, мы знаем, что слоны больше, чем лошади, которые в свою очередь больше, чем ослы, которые больше обезьян, поэтому слоны также должны быть больше, чем обезьяны. ...
Как уже отмечалось, программа на языке Пролог, содержащая факты и правила, составляет базу знаний. При разработке программ на Прологе часто используют встроенные предикаты , т. е. предикаты, определяемые автоматически при инициализации интерпретатора Пролога. ... Пример . ... Yes . ... X = слон, write(X), nl. слон X = слон Yes . В последнем примере сначала переменная X унифицируется с атомом слон , а затем значение переменной X , т. е. слон , выводится на экран при помощи предиката write/1 . ...
... В автомобильных гонках три первых места заняли Алеша, Петя и Коля. Какое место занял каждый из них, если Петя занял не второе и не третье место, а Коля - не третье? Имя . I место . ... III место . Алеша . ... Традиционным способом задача решается заполнением таблицы.По условию задачи Петя занял не второе и не третье место, а Коля - не третье. ... Коля занял не третье место */ соответствие(X, Y) :- имя(X), X=коля, место(Y), not(Y=третье). соответствие(X, Y) :- имя(X), X=алеша, место(Y). ...
В языке Пролог имеется ряд встроенных функций для вычисления арифметических выражений, некоторые из которых перечислены в таблице. ... Абсолютная величина числа X . ... sin(X) . ... float(X) . ... В следующих примерах переменная X унифицируется со значениями арифметических выражений: ?- ... Предикат float заставит считать значение sin(pi/2) вещественным числом: ?- 1.0 is float( sin(pi/2)). ... Цель X > Y (больше) будет успешна, если выражение X будет соответствовать большему числу, чем выражение Y . ...
... Если требуется, например, переменной R присвоить значение, равное умноженному на три большему из двух выражений X и Y , то, используя определенную ниже процедуру максимум , это можно записать так: максимум(X,Y,Z), R is 3*Z. (скачать файл с примерами) . Пример . ... X = 50 Yes ?- максимум(100,50,X). ... X = 100 Yes Последний ответ показывает, что наш предикат позволяет находить ответ на вопросы типа: "Каково должно быть число, чтобы максимум из искомого числа и числа 50 равнялся бы 100?" ...
максимум (X,X,X). максимум (X,Y,X):- X Y. максимум (X,Y,Y):- X Y. гипотенуза (X,Y,Z):- number (X), number (Y), Z is sqrt(X**2 + Y**2). мин_гип(A1,B1,A2,B2, Min ):- гипотенуза (A1,B1,C1), гипотенуза (A2,B2,C2), Min is min (C1,C2). сумма (X,Y):- integer (X), X 10, Y is X. сумма (X,Y):- integer (X), X1 is X//10, сумма (X1,Y1), Z is X mod 10, Y is Y1+Z. печать_суммы:- ...
Списки - одна из наиболее часто употребляемых структур в Прологе. При записи список заключают в квадратные скобки, а элементы списка разделяют запятыми, например, [слон, лошадь, обезьяна, собака] Это список из четырех атомов - слон, лошадь, обезьяна, собака . ... Вот пример списка с несколько более сложной структурой: [слон, [ ], X, предок(Х, том), [a,b,c], f(22)] . ... Работа процедуры завершится, когда все перестановки будут исчерпаны: ?- все_перестановки(['маркиза', 'ваши прекрасные глаза', | ...
#!/usr/bin/env ruby =begin Это комментарий =end # Это тоже комментарий # Инструкция заканчивается концом строки puts "Hello, World!" # Несколько инструкций в одной строке puts "Это тест, "; puts "демонстрирующий работу Ruby." # Незаконченная инструкция, # продолжение которой на следующей строке puts "Программирование на Ruby - " + "приятное занятие." # Утверждение, разделенное на несколько строк puts \ "И мы обязательно этому научимся!"
Ruby - один из самых молодых языков программирования. ... Пользователям ОС Linux следует поместить в начало файла с текстом программы следующую строку: #!/usr/bin/env ruby Она обязательно должна начинаться с первой позиции. ... Программа на языке Ruby, часто называемая скриптом, есть последовательность инструкций (утверждений, предложений). ... Пример #!/usr/bin/env ruby # Инструкция заканчивается концом строки puts "Hello, World!" ... Далее строка #!/usr/bin/env ruby в тексты программ не включается. ...
... Каждый объект есть представитель (экземпляр) некоторого класса и его поведение (функциональность) определяется именно им. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия, называемые методами. ... числа . ... строки . ... Для получения строки, содержащей символ с заданным ASCII кодом, используется метод chr , например, puts 209.chr Следует помнить, что этот метод может быть применен только к положительному целому числу, не превышающему 255. ...
usr/bin/env ruby puts puts всегда завершается переходом к новой строке. print А оператор print не делает этого по умолчанию, print как вы видите в этом примере.\n print print может быть вызван сразу , с несколькими аргументами.\n p Time.now , Time.now +3600 printf %8s~~%-8s\n , abcd , abcd ...