:- use_module(library(format)). :- use_module(library(lists)). :- use_module(library(dif)). vogel(trottellumme). vogel(kranich). category(basstölpel,tauchvogel). category(brandgans,gänse). category(graugans,gänse). category(graureiher,schreitvögel). category(gänsesäger,tauchvogel). category(haubentaucher,tauchvogel). category(hausgans,gänse). category(höckerschwan,schwäne). category(kanadagans,gänse). category(kormoran,tauchvogel). category(kranich, schreitvögel). category(nilgans,gänse). category(rohrdrommel,schreitvögel). category(rothalstaucher,tauchvogel). category(saatgans,gänse). category(schwarzhalstaucher,tauchvogel). category(schwarzstorch,schreitvögel). category(seidenreiher,schreitvögel). category(silberreiher,schreitvögel). category(singschwan,schwäne). category(streifengans,gänse). category(trottellumme,tauchvogel). category(weißstorch,schreitvögel). category(zwergtaucher, tauchvogel). category(mandarinente,ente). category(stockente,ente). category(krickente,ente). category(knäckente,ente). category(löffelente,ente). category(spießente,ente). category(schnatterente,ente). category(pfeifente,ente). category(kolbenente,ente). category(tafelente,ente). category(reiherente,ente). category(schellente,ente). category(eiderente,ente). category(fischadler,greifvogel). category(seeadler,greifvogel). category(steinadler,greifvogel). category(wespenbussard,greifvogel). category(mäusebussard,greifvogel). category(habicht,greifvogel). category(sperber,greifvogel). category(rohrweihe,greifvogel). category(wiesenweihe,greifvogel). category(kornweihe,greifvogel). category(schwarzmilan,greifvogel). category(rotmilan,greifvogel). category(baumfalke,greifvogel). category(wanderfalke,greifvogel). category(turmfalke,greifvogel). eq(saatgans, graugans). eq(saatgans, streifengans). eq(singschwan,höckerschwan). eq(spießente, stockente). eq(schnatterente, stockente). eq(wespenbussard,mäusebussard). eq(habicht,mäusebussard). eq(sperber,straßentaube). eq(rohrweihe,mäusebussard). eq(kornweihe, wiesenweihe). eq(schwarzmilan,mäusebussard). eq(rotmilan,mäusebussard). gt(basstölpel,X) :- category(X,möwe). gt(brandgans, stockente). gt(gänsesäger,stockente). gt(kanadagans,graugans). gt(kanadagans,saatgans). gt(kormoran,stockente). gt(nilgans, stockente). gt(schwarzhalstaucher, zwergtaucher). gt(schwarzstorch, weißstorch). gt(weißstorch, graureiher). gt(kranich,X) :- category(X,schreitvögel), dif(kranich,X). gt(knäckente, krickente). gt(kolbenente,stockente). gt(eiderente,stockente). gt(fischadler,mäusebussard). gt(seeadler,steinadler). gt(steinadler,mäusebussard). gt(baumfalke,turmfalke). gt(wanderfalke,turmfalke). gt(wanderfalke,baumfalke). lt(X,Y) :- gt(Y,X). lt(brandgans,X) :- category(X,gänse), dif(brandgans,X). lt(graugans, hausgans). lt(graugans, schwan). lt(nilgans, graugans). lt(rohrdrommel,graureiher). lt(rothalstaucher, haubentaucher). lt(seidenreiher,silberreiher). lt(zwergtaucher,stockente). lt(zwergtaucher,X) :- category(X,tauchvogel), dif(zwergtaucher,X). lt(mandarinente, stockente). lt(krickente, stockente). lt(knäckente, stockente). lt(löffelente, stockente). lt(pfeifente, stockente). lt(tafelente, stockente). lt(reiherente, stockente). lt(schellente, stockente). lt(wiesenweihe, mäusebussard). lt(wiesenweihe, rohrweihe). lt(kornweihe, rohrweihe). lt(kornweihe, mäusebussard). %% lt(feldsperling, falke). %% lt(haussperling, falke). %% lt(falke, graureiher). %% lt(storch, graureiher). %% lt(falke, storch). %% gt(storch, feldsperling). %% eq(haussperling, feldsperling). %% transitive closure ltt(X,Y) :- lt(X,Y). ltt(X,Z) :- lt(X,Y), ltt(Y,Z). edge_lt([X,Y]) :- lt(X,Y). edge_eq([X,Y]) :- eq(X,Y). draw_lt(P) :- reverse(P, P1), format("~a -> ~a;~n", P1). draw_eq(P) :- format("{rank=same; ~a -> ~a [dir=both, style=dotted];}~n", P). draw_sing(X) :- format("~a;~n", X). dot :- format("digraph{~n", []), findall(X, edge_lt(X), L), maplist(draw_lt, L), findall(Y, edge_eq(Y), L1), maplist(draw_eq, L1), format("}", []).