/* * randomList(+Laenge, -Zufallsliste) * Zufallsliste ist eine Liste von Zufallszahlen (0 bis 99) * der Laenge 'Laenge'. */ randomList(0, []). randomList(N, [R|Rest]):- N > 0, N1 is N - 1, R is random(100), randomList(N1, Rest). /* * randomTree(+N, -Tree) * ERGAENZEN !! */ randomTree(N, Tree):- randomList(N, List), list2Tree(List, Tree). /* * list2Tree(+List, ?Tree) * ERGAENZEN */ list2Tree(List, Tree):- list2Tree(List, nil, Tree). list2Tree([X|Xs], Old, Tree):- enter(X, Old, New), list2Tree(Xs, New, Tree). list2Tree([], New, New). /* tree(?Baum) * 'Baum' ist ein korrekter Baum (Typpraedikat) */ tree(nil). tree(t(_, L, R)):- tree(L), tree(R). /* * enter(+Element, +Alter-Baum, ?Neuer-Baum) * Neuer-Baum ist Alter-Baum mit eingefuegtem Element. * Die Baueme sind sortiert. * nil steht fuer einen leeren Baum. */ enter(X, t(X, L, R), t(X, L, R)):- !. enter(X, t(Y, L, R), t(Y, NL, R)):- X @< Y, !, enter(X, L, NL). enter(X, t(Y, L, R), t(Y, L, NR)):- X @> Y, !, enter(X, R, NR). enter(X, nil, t(X, nil, nil)). /* * magic3x(+M) * M ist ein magisches 3x3 Quadrat. */ magic3x(M):- numlist(1, 9, Ns), sumlist(Ns, S), S3 is S / 3, !, permutation(Ns, M), M = [X11, X12, X13, X21, X22, X23, X31, X32, X33], S3 is X11 + X12 + X13, S3 is X21 + X22 + X23, S3 is X31 + X32 + X33, S3 is X11 + X21 + X31, S3 is X12 + X22 + X32, S3 is X13 + X23 + X33, S3 is X11 + X22 + X33, S3 is X13 + X22 + X31. /* * writeList(+List) * erwartet eine quadratische Matrix als Liste und * gibt sie als quadratisches Schema aus. * (logische Bedeutung: true) */ writeList(List):- length(List, N1), S is integer(sqrt(N1)), writeList(List, 0, S). writeList([X|Xs], N, S):- write(X), N1 is (N + 1) mod S, writeSep(N1), writeList(Xs, N1, S). writeList([], _, _). writeSep(0):- nl, !. writeSep(_):- write(' '). /* * kante(A, B) * es gibt eine gerichtete Verbindung von A nach B. */ kante(a, b). kante(a, c). kante(b, c). kante(b, d). kante(c, e). kante(c, f). kante(e, g). /* * ziel(A) * A ist ein Zielknoten. */ ziel(g). ziel(d).