Структуры в прологе - Prolog
Формулировка задачи:
Помогите пожалуйста решить задачу в турбо прологе - Найти все отрезки, которые при вертикальном параллельном перемещении совпадают с одной из сторон треугольника. Реализовать с помощью структур. Пролог начал изучать недавно и не имею представления как решать эту задачу. Заранее спасибо.
Решение задачи: «Структуры в прологе»
textual
Листинг программы
- domains
- point=p(real,real)
- interval=i(point,point)
- otrlist=interval*
- predicates
- otrezok(interval)
- storona(interval)
- parallel(interval,interval)
- list1(otrlist)
- addotr(otrlist,otrlist)
- checkotr(otrlist,otrlist)
- readotr(interval)
- runo(otrlist)
- clauses
- %--------Data Base---------
- otrezok(i(p(-1,-1),p(1,1))).
- otrezok(i(p(2,2),p(4,4))).
- otrezok(i(p(1,-1),p(-1,-1))).
- storona(i(p(0,0),p(2,2))).
- storona(i(p(0,0),p(2,0))).
- storona(i(p(2,0),p(2,2))).
- %--------------Proverka na parallelnost`-----------------
- parallel(i(p(X1,Y1),p(X2,Y2)),i(p(X3,Y3),p(X4,Y4))):-X3-X1=X4-X2,Y3-Y1=Y4-Y2.
- parallel(i(p(X1,Y1),p(X2,Y2)),i(p(X3,Y3),p(X4,Y4))):-X4-X1=X3-X2,Y4-Y1=Y3-Y2.
- %--------------BBoD otrezka c Klaviaturi----------------------------
- list1(L1):- findall(X, otrezok(X), L1).
- addotr(L1, L2):- write("Dobavit eche otrezok? (y/n)"), readchar(Ch), Ch = 'y', !, nl, readotr(Z), addotr([Z | L1], L2).
- addotr(L, L):-readchar(Ch),Ch='n',!,nl.
- readotr(i(p(X1,Y1),p(X2,Y2))):- write("X1 = "), readint(X1), write("Y1 = "), readint(Y1), nl, write("X2 = "), readint(X2), write("Y2 = "), readint(Y2), nl,!.
- readotr(Z):- nl, write("Error! Repeat!"), readchar(_), nl, nl, readotr(Z).
- %-------Proverka Bcex OTpe3KOB Ha parallelnost` co CToponami Tpeugolnika-----------
- checkotr([], []).
- checkotr([Tr1 | L1], [Tr1 | L2]):- storona(A),parallel(Tr1,A), !, checkotr(L1, L2).
- checkotr([_ | L1], L2):- checkotr(L1, L2).
- runo(A):-list1(L1),addotr(L1,L2),checkotr(L2,A).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д