Точки на равнината
Можете да изпълнявате всички примери и задачи в този урок в новото конзолно приложение или можете да използвате конзолното приложение, което стартирахме в първия ни урок.
Нека има набор от точки с известни координати на равнината в декартовата координатна система. Необходимо е да се опишат тези точки в Prolog и да се търсят точки по различни критерии.
Нека опишем точки под формата на point/2 предикати от два аргумента - координати. За да направим това, в секцията с факти за класа декларираме недетерминиран предикат:
точка : (цяло число X, цяло число Y).
Задайте набора от точки в раздела на клаузите. Нека този набор съдържа девет точки:
точка (1,1). точка (1,2). точка (1,4).
точка(2,1). точка (2,2). точка (2,4).
точка (3,2). точка (4,1). точка (4,3).
И така, изходният код във файла main.pro след тези модификации трябва да бъде така:
отворена основна конзола
точка :(цяло число X, цяло число Y).
стр
точка (1,1). точка (1,2). точка (1,4).
точка(2,1). точка (2,2). точка (2,4).
точка (3,2). точка (4,1). точка (4,3).
Тялото на целта е предикатът run().
крайно изпълнение основно
Листинг 2. Описване на точки в равнината
Пример4.Нека потърсим точка с координати, например X=1 и Y=2. За да направим това, вмъкваме извикване на предиката point(1,2) в тялото на предиката run() и показваме съобщение за намерената точка. В случай, че необходимата точка липсва, не забравяйте да предоставите второто изречение с резултата от съответното съобщение:
write("Намерена е точка с определени координати"),
write("Точка с посочени координати НЕ е намерена"),
Пример 5.Нека потърсим точка с въведени от клавиатурата координати. За целта използваме следната цел:
write("Точка отнамерени на определени координати"),
write("Точка с посочени координати НЕ е намерена"),
Пример 6.Нека потърсим точка с дадена координата X и в случай на успешно намиране да определим координатата Y:
writef("Намерена точка с координати %,%",X,Y),
write("Точка НЕ е намерена"),
Моля, обърнете внимание, че в програмата има няколко точки с координата, например X=1. Как да намерите всички тези точки? Това е много лесно да се направи в Prolog. В изречението, където се извършва търсенето, трябва да премахнете изрязването и да принудите връщане назад, като използвате предиката fail ().
Пример 7.Нека потърсим всички точки с дадена координата X и в случай на успешно намиране да определим координатата Y на всяка от тях:
writef("Намерена точка с координати %,% \n",X,Y),
Предикатът writef извежда форматиран низ. Вместо знаци за процент, той последователно замества стойностите на променливите, разделени със запетаи вдясно от форматирания низ. Символът \n е символ за нов ред. Ако този знак не е посочен, тогава целият изход ще бъде извършен в един ред.
Пример 8.Нека потърсим всички точки над хоризонталната линия Y=2:
writef("Намерена точка с координати %,% \n",X,Y),
Пример9.Нека потърсим всички точки, разположени на правата y=x:
writef("Намерена точка с координати %,% \n",X, X),
Обърнете внимание, че в този пример вместо целевата точка (X, Y), X=Y, сме използвали цел с вътрешна аргументна точка за обединяване (X, X), която сама ще извърши теста за равенство: X=Y.
Задача 3.Покажете X,Y координатите на всички точки.
Задача 4.Отпечатайте всички точки, чиято сума от координати X и Y е равна на 5.