Структуры в прологе - 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д