Learning the concept of arch.

Source: PROLOG programming for artificial intelligence, 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7.


Program source code:


% Figure 19.12  Learning the concept of arch.
:- op( 900, fy, not).
% not Goal): negation as failure; 
%   Note: This is often available as a built-in predicate,
%   often written as prefix operator "\+", e.g. \+ likes(mary,snakes)
not Goal  :-
  Goal, !, fail
% Learning about arch
backliteral( isa(X,Y), [X:object], [])  :-
  member( Y, [polygon,convex_poly,stable_poly,unstable_poly,triangle,
              rectangle, trapezium, unstable_triangle, hexagon]).      % Y is any figure
backliteral( support(X,Y), [X:object, Y:object], []).
backliteral( touch(X,Y), [X:object, Y:object], []).
backliteral( not G, [X:object,Y:object], [])  :-
  G = touch(X,Y); G = support(X,Y).
prolog_predicate( isa(X,Y)).
prolog_predicate( support(X,Y)).
prolog_predicate( touch(X,Y)).
prolog_predicate( not G).
ako( polygon, convex_poly).         % Convex polygon is a kind of polygon
ako( convex_poly, stable_poly).     % Stable polygon is a kind of convex polygon
ako( convex_poly, unstable_poly).   % Unstable polygon is a kind of convex poly.
ako( stable_poly, triangle).        % Triangle is a kind of stable polygon
ako( stable_poly, rectangle).       % Rectangle is a kind of stable polygon
ako( stable_poly, trapezium).       % Trapezium is a kind of stable polygon
ako( unstable_poly, unstable_triangle).  % Unstable triangle is a.k.o. unstable poly.
ako( unstable_poly, hexagon).       % Hexagon is a kind of unstable polygon
ako( rectangle, X)  :-
  member( X, [a1,a2,a3,a4,a5,b1,b2,b3,b4,b5,c1,c2,c3]).    % All rectangles
ako( triangle, c4).                % Stable triangle
ako( unstable_triangle, c5).       % Triangle upside down
isa( Figure1, Figure2)  :-         % Figure1 is a Figure2
  ako( Figure2, Figure1).
isa( Fig0, Fig) :-
  ako( Fig1, Fig0),
  isa( Fig1, Fig).
support(a1,c1).    support(b1,c1).
support(a3,c3).    support(b3,c3).   touch(a3,b3).      
support(a4,c4).    support(b4,c4).
support(a5,c5).    support(b5,c5).
start_clause( [ arch(X,Y,Z)] / [X:object,Y:object,Z:object]).
ex( arch(a1,b1,c1)).
ex( arch(a4,b4,c4)).
nex( arch(a2,b2,c2)).
nex( arch(a3,b3,c3)).
nex( arch(a5,b5,c5)).
nex( arch(a1,b2,c1)). 
nex( arch(a2,b1,c1)).        


pl/prolog/pllib/arc.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna) Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0