test(exer10, 2, [declaration(sp, gehalt, [d('A1', +, list, 'Liste'), d('A2', -, list, 'Gehaltsliste')])], [recursivecase, recursivecase], [map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg2', 2, -, list, ['Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg1', 1, +, list, ['Liste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Liste'))], 'gehalt([N,G|R], [N,G2|R2]):-G>5000, G2 is G*1,02, gehalt(R,R2).\n gehalt([N,G|R], [N,G2|R2]):-G=<5000, G2 is G*1,03, gehalt(R,R2).\n', [error(id(g7), penalty(0.5), poslist([pos(1, 3)]), hint('2/0: Dieses Subziel ist unbekannt.'), highlighted(['gehalt([N, G|R], [N, G2|R2]):-G>5000, G2 is G*1, 2 , gehalt(R, R2).
', 'gehalt([N, G|R], [N, G2|R2]):-G=<5000, G2 is G*1, 3, gehalt(R, R2).
'])), error(id(g7), penalty(0.5), poslist([pos(2, 3)]), hint('3/0: Dieses Subziel ist unbekannt.'), highlighted(['gehalt([N, G|R], [N, G2|R2]):-G>5000, G2 is G*1, 2, gehalt(R, R2).
', 'gehalt([N, G|R], [N, G2|R2]):-G=<5000, G2 is G*1, 3 , gehalt(R, R2).
']))], [ok, ok], ['', ''], korrekt). test(exer10, 3, [declaration(sp, gehaelter, [d('A1', +, list, 'Liste'), d('A2', -, list, 'Gehaltsliste')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg2', 2, -, list, ['Gehaltsliste']), predicatedec(sp, gehaelter, 2, gehaelter/2, main, 'A2', 2, -, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg1', 1, +, list, ['Liste']), predicatedec(sp, gehaelter, 2, gehaelter/2, main, 'A1', 1, +, list, 'Liste'))], 'gehaelter([],[]).\n gehaelter([K|Xs], [K|Ys]):-odd(K), gehaelter(Xs, Ys).\n gehaelter([K|Xs], [Kb|Ys]):-even(K), K is K*1.03, gehaelter(Xs, Ys).\n', [error(id(g7), penalty(0.5), poslist([pos(2, 1)]), hint('odd/1: Dieses Subziel ist unbekannt.'), highlighted(['gehaelter([], []).
', 'gehaelter([K|Xs], [K|Ys]):- odd(K) , gehaelter(Xs, Ys).
', 'gehaelter([K|Xs], [Kb|Ys]):-even(K), K is K*1.03, gehaelter(Xs, Ys).
'])), error(id(g7), penalty(0.5), poslist([pos(3, 1)]), hint('even/1: Dieses Subziel ist unbekannt.'), highlighted(['gehaelter([], []).
', 'gehaelter([K|Xs], [K|Ys]):-odd(K), gehaelter(Xs, Ys).
', 'gehaelter([K|Xs], [Kb|Ys]):- even(K) , K is K*1.03, gehaelter(Xs, Ys).
']))], [ok, ok], ['', ''], korrekt). test(exer10, 5, [declaration(sp, gehalt_neu, [d('A1', +, list, 'Liste'), d('A2', -, list, 'Gehaltsliste')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg2', 2, -, list, ['Gehaltsliste']), predicatedec(sp, gehalt_neu, 2, gehalt_neu/2, main, 'A2', 2, -, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg1', 1, +, list, ['Liste']), predicatedec(sp, gehalt_neu, 2, gehalt_neu/2, main, 'A1', 1, +, list, 'Liste'))], 'gehalt_neu([], []).\n gehalt_neu([N,B|R], E):-B>5000,B is B+B*0.02,gehalt_neu(R,E),E is [N,B|E].\n gehalt_neu([N,B|R], E):-B is B+B*0.03,gehalt_neu(R,E),E is [N,B|E].\n', [error(id(s7e), penalty(0.8), poslist([pos(2, 0, 2)]), hint('An der Stelle von E sollte eine Nicht-Leer-Liste sein.'), highlighted(['gehalt_neu([], []).
', 'gehalt_neu([N, B|R], E ):-B>5000, B is B+B*0.02, gehalt_neu(R, E), E is [N, B|E].
', 'gehalt_neu([N, B|R], E):-B is B+B*0.03, gehalt_neu(R, E), E is [N, B|E].
'])), error(id(s7e), penalty(0.8), poslist([pos(3, 0, 2)]), hint('An der Stelle von E sollte eine Nicht-Leer-Liste sein.'), highlighted(['gehalt_neu([], []).
', 'gehalt_neu([N, B|R], E):-B>5000, B is B+B*0.02, gehalt_neu(R, E), E is [N, B|E].
', 'gehalt_neu([N, B|R], E ):-B is B+B*0.03, gehalt_neu(R, E), E is [N, B|E].
'])), error(id(s1a), penalty(0.1), poslist([pos(2, 0, 2, 'E')]), hint('An der Stelle von E sollte eine (De-)Komposition stattfinden.'), highlighted(['gehalt_neu([], []).
', 'gehalt_neu([N, B|R], E ):-B>5000, B is B+B*0.02, gehalt_neu(R, E), E is [N, B|E].
', 'gehalt_neu([N, B|R], E):-B is B+B*0.03, gehalt_neu(R, E), E is [N, B|E].
'])), error(id(s5b), penalty(0.1), poslist([pos(2, 4)]), hint('E is [N, B|E] : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['gehalt_neu([], []).
', 'gehalt_neu([N, B|R], E):-B>5000, B is B+B*0.02, gehalt_neu(R, E), E is [N, B|E] .
', 'gehalt_neu([N, B|R], E):-B is B+B*0.03, gehalt_neu(R, E), E is [N, B|E].
'])), error(id(s1a), penalty(0.1), poslist([pos(3, 0, 2, 'E')]), hint('An der Stelle von E sollte eine (De-)Komposition stattfinden.'), highlighted(['gehalt_neu([], []).
', 'gehalt_neu([N, B|R], E):-B>5000, B is B+B*0.02, gehalt_neu(R, E), E is [N, B|E].
', 'gehalt_neu([N, B|R], E ):-B is B+B*0.03, gehalt_neu(R, E), E is [N, B|E].
'])), error(id(s5b), penalty(0.1), poslist([pos(3, 3)]), hint('E is [N, B|E] : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['gehalt_neu([], []).
', 'gehalt_neu([N, B|R], E):-B>5000, B is B+B*0.02, gehalt_neu(R, E), E is [N, B|E].
', 'gehalt_neu([N, B|R], E):-B is B+B*0.03, gehalt_neu(R, E), E is [N, B|E] .
'])), error(id(s8a), penalty(0.1), poslist([pos(3, 1, 2, 'B'+'B'*0.03)]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable B+B*0.03 und einer Zahl.'), highlighted(['gehalt_neu([], []).
', 'gehalt_neu([N, B|R], E):-B>5000, B is B+B*0.02, gehalt_neu(R, E), E is [N, B|E].
', 'gehalt_neu([N, B|R], E):-B is B+B*0.03 , gehalt_neu(R, E), E is [N, B|E].
']))], [ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer10, 6, [declaration(sp, gehalt, [d('A1', +, list, 'Liste'), d('A2', -, list, 'Gehaltsliste')])], [recursivecase], [map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg2', 2, -, list, ['Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tptrans, 2, tptrans/2, main, 'Arg1', 1, +, list, ['Liste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Liste'))], 'gehalt([Name, Gehalt|Rest], [N2,G2|R2]):-Gehalt=<5000.\n', [error(id(pre3b), penalty(0.3), poslist([pos(1)]), hint('Sie haben diese Klausel als Rekursionsklausel gewählt, jedoch existiert kein rekursives Subziel in dieser Klausel.'), highlighted([' gehalt([Name, Gehalt|Rest], [N2, G2|R2]) :- Gehalt=<5000 .
']))], [ok], [korrekt], ''). test(exer11, 1, [declaration(sp, meist, [d('A1', +, number, meistgesehenen), d('A2', -, list, 'Endliste'), d('A3', +, list, 'Liste')])], [recursivecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, meist, 3, meist/3, main, 'A3', 3, +, list, 'Liste')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, meist, 3, meist/3, main, 'A1', 1, +, number, meistgesehenen)), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, meist, 3, meist/3, main, 'A2', 2, -, list, 'Endliste'))], 'meist(N,R, zuschauer([])):-meist(_, [keine_daten_mehr]).\n meist(0,_, zuschauer([_])).\n meist(N, [E|R], zuschauer([E|R1])):-N1 is N-1, meist(N1, R, zuschauer(R1)).\n', [error(id(pre2c), penalty(0.3), poslist([pos(1, 0, 3, zuschauer([]))]), hint('Der Typ von zuschauer([]) stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['meist(N, R, zuschauer([]) ):-meist(_, [keine_daten_mehr]).
', 'meist(0, _, zuschauer([_])).
', 'meist(N, [E|R], zuschauer([E|R1])):-N1 is N-1, meist(N1, R, zuschauer(R1)).
'])), error(id(pre2c), penalty(0.3), poslist([pos(2, 0, 3, zuschauer(['_']))]), hint('Der Typ von zuschauer([_]) stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['meist(N, R, zuschauer([])):-meist(_, [keine_daten_mehr]).
', 'meist(0, _, zuschauer([_]) ).
', 'meist(N, [E|R], zuschauer([E|R1])):-N1 is N-1, meist(N1, R, zuschauer(R1)).
'])), error(id(pre2c), penalty(0.3), poslist([pos(3, 0, 3, zuschauer(['E'|'R1']))]), hint('Der Typ von zuschauer([E|R1]) stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['meist(N, R, zuschauer([])):-meist(_, [keine_daten_mehr]).
', 'meist(0, _, zuschauer([_])).
', 'meist(N, [E|R], zuschauer([E|R1]) ):-N1 is N-1, meist(N1, R, zuschauer(R1)).
'])), error(id(pre3b), penalty(0.3), poslist([pos(1)]), hint('Sie haben diese Klausel als Rekursionsklausel gewählt, jedoch existiert kein rekursives Subziel in dieser Klausel.'), highlighted([' meist(N, R, zuschauer([])) :- meist(_, [keine_daten_mehr]) .
', 'meist(0, _, zuschauer([_])).
', 'meist(N, [E|R], zuschauer([E|R1])):-N1 is N-1, meist(N1, R, zuschauer(R1)).
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer11, 2, [declaration(sp, most, [d('A1', +, number, meistgesehenen), d('A2', +, list, 'Liste'), d('A3', -, list, 'Liste')])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, most, 3, most/3, main, 'A2', 2, +, list, 'Liste')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, most, 3, most/3, main, 'A1', 1, +, number, meistgesehenen)), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, most, 3, most/3, main, 'A3', 3, -, list, 'Endliste'))], 'most(_, [], [keineweiteresendung]).\n most(1, [Sendung|Rest], [Sendung]).\n most(N, [Sendung|GRest], [Sendung|Rest]):-N1 is N-1, most(N1, GRest, Rest).\n', [error(id(s7c), penalty(0.8), poslist([pos(2, 0, 1)]), hint('An der Stelle von 1 erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['most(_, [], [keineweiteresendung]).
', 'most( 1 , [Sendung|Rest], [Sendung]).
', 'most(N, [Sendung|GRest], [Sendung|Rest]):-N1 is N-1, most(N1, GRest, Rest).
'])), error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 3)]), hint('An der Stelle von [keineweiteresendung] sollte eine leere Liste sein.'), highlighted(['most(_, [], [keineweiteresendung] ).
', 'most(1, [Sendung|Rest], [Sendung]).
', 'most(N, [Sendung|GRest], [Sendung|Rest]):-N1 is N-1, most(N1, GRest, Rest).
'])), error(id(s7g1), penalty(0.8), poslist([pos(2, 0, 3)]), hint('An der Stelle von [Sendung] sollte eine leere Liste sein.'), highlighted(['most(_, [], [keineweiteresendung]).
', 'most(1, [Sendung|Rest], [Sendung] ).
', 'most(N, [Sendung|GRest], [Sendung|Rest]):-N1 is N-1, most(N1, GRest, Rest).
'])), error(id(s7k), penalty(0.8), poslist([pos(1, 0, 1, '_')]), hint('An der Stelle von _ erwarten wir eine Variable.'), highlighted(['most( _ , [], [keineweiteresendung]).
', 'most(1, [Sendung|Rest], [Sendung]).
', 'most(N, [Sendung|GRest], [Sendung|Rest]):-N1 is N-1, most(N1, GRest, Rest).
'])), error(id(s8a), penalty(0.1), poslist([pos(1, 0, 1, '_')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable _ und einer Zahl.'), highlighted(['most( _ , [], [keineweiteresendung]).
', 'most(1, [Sendung|Rest], [Sendung]).
', 'most(N, [Sendung|GRest], [Sendung|Rest]):-N1 is N-1, most(N1, GRest, Rest).
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'Rest')]), hint('Rest: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['most(_, [], [keineweiteresendung]).
', 'most(1, [Sendung|Rest] , [Sendung]).
', 'most(N, [Sendung|GRest], [Sendung|Rest]):-N1 is N-1, most(N1, GRest, Rest).
']))], [ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer11, 3, [declaration(sp, bestsendung, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehenen), d('A3', -, list, 'EndListe')])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, bestsendung, 3, bestsendung/3, main, 'A1', 1, +, list, 'Liste')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, bestsendung, 3, bestsendung/3, main, 'A2', 2, +, number, meistgesehenen)), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, bestsendung, 3, bestsendung/3, main, 'A3', 3, -, list, 'Endliste'))], 'bestsendung(zuschauer, N, Neulist).\n bestsendung(zuschauer, 0, NeuerList).\n bestsendung(zuschauer, N, Neuelist):- zuschauer = [T, N,Z].\n', [error(id(pre2c), penalty(0.3), poslist([pos(1, 0, 1, zuschauer)]), hint('Der Typ von zuschauer stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['bestsendung( zuschauer , N, Neulist).
', 'bestsendung(zuschauer, 0, NeuerList).
', 'bestsendung(zuschauer, N, Neuelist):-zuschauer=[T, N, Z].
'])), error(id(pre2c), penalty(0.3), poslist([pos(2, 0, 1, zuschauer)]), hint('Der Typ von zuschauer stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['bestsendung(zuschauer, N, Neulist).
', 'bestsendung( zuschauer , 0, NeuerList).
', 'bestsendung(zuschauer, N, Neuelist):-zuschauer=[T, N, Z].
'])), error(id(pre2c), penalty(0.3), poslist([pos(3, 0, 1, zuschauer)]), hint('Der Typ von zuschauer stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['bestsendung(zuschauer, N, Neulist).
', 'bestsendung(zuschauer, 0, NeuerList).
', 'bestsendung( zuschauer , N, Neuelist):-zuschauer=[T, N, Z].
'])), error(id(pre3a), penalty(0.3), poslist([pos(1)]), hint('Sie haben diese Klausel als Rekursionsabschluss gewählt. Jedoch fehlt eine dazugehörige Rekursionsklausel, oder diese Klausel ist kein Rekursionsabschluss.'), highlighted([' bestsendung(zuschauer, N, Neulist) .
', 'bestsendung(zuschauer, 0, NeuerList).
', 'bestsendung(zuschauer, N, Neuelist):-zuschauer=[T, N, Z].
'])), error(id(pre3a), penalty(0.3), poslist([pos(2)]), hint('Sie haben diese Klausel als Rekursionsabschluss gewählt. Jedoch fehlt eine dazugehörige Rekursionsklausel, oder diese Klausel ist kein Rekursionsabschluss.'), highlighted(['bestsendung(zuschauer, N, Neulist).
', ' bestsendung(zuschauer, 0, NeuerList) .
', 'bestsendung(zuschauer, N, Neuelist):-zuschauer=[T, N, Z].
'])), error(id(pre3b), penalty(0.3), poslist([pos(3)]), hint('Sie haben diese Klausel als Rekursionsklausel gewählt, jedoch existiert kein rekursives Subziel in dieser Klausel.'), highlighted(['bestsendung(zuschauer, N, Neulist).
', 'bestsendung(zuschauer, 0, NeuerList).
', ' bestsendung(zuschauer, N, Neuelist) :- zuschauer=[T, N, Z] .
']))], [ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer11, 4, [declaration(sp, zuschauer, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehenen), d('A3', -, list, 'EndListe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, zuschauer, 3, zuschauer/3, main, 'A1', 1, +, list, 'Liste')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, zuschauer, 3, zuschauer/3, main, 'A2', 2, +, number, meistgesehenen)), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, zuschauer, 3, zuschauer/3, main, 'A3', 3, -, list, 'Endliste'))], 'zuschauer([],0,[]).\n zuschauer([[Sender, Sendung, Zuschauer]|R], N, [[Sender,Sendung,Zuschauer|R1]]):- N1 is N-1, zuschauer(R,N1,R1).\n', [error(id(s7g), penalty(0.01), poslist([]), hint('Ein Rekursionsabschluss fehlt.'), highlighted([' zuschauer([], 0, []) .
', ' zuschauer([[Sender, Sendung, Zuschauer]|R], N, [[Sender, Sendung, Zuschauer|R1]]) :- N1 is N-1 , zuschauer(R, N1, R1) .
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 3, [['Sender', 'Sendung', 'Zuschauer'|'R1']])]), hint('[[Sender, Sendung, Zuschauer|R1]]: Dieses Argument sollte in folgender Form zerlegt werden: [Head|Rest]'), highlighted(['zuschauer([], 0, []).
', 'zuschauer([[Sender, Sendung, Zuschauer]|R], N, [[Sender, Sendung, Zuschauer|R1]] ):-N1 is N-1, zuschauer(R, N1, R1).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer11, 5, [declaration(sp, auswahl, [d('A1', +, list, 'Liste'), d('A2', +, number, 'Laenge')])], _G25379634, [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge', 'N', 'meistgesehenen Sendungen']), predicatedec(sp, auswahl, 2, auswahl/2, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste', 'Altliste', 'Zuschauerliste']), predicatedec(sp, auswahl, 2, auswahl/2, main, 'A1', 1, +, list, 'Liste'))], 'auswahl(L,0).\n auswahl([[X,Y,Z]|T], N):-N=M, zuschauer(P).\n', [error(id(d2a), penalty(0.1), poslist([pred, auswahl]), hint('Die Deklaration für das Prädikat auswahl hat weniger Argumentstellen als erforderlich.'))], [ok], [korrekt], ''). test(exer11, 6, [declaration(sp, meist, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehenen), d('A3', -, list, 'EndListe')])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, meist, 3, meist/3, main, 'A1', 1, +, list, 'Liste')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, meist, 3, meist/3, main, 'A2', 2, +, number, meistgesehenen)), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, meist, 3, meist/3, main, 'A3', 3, -, list, 'Endliste'))], 'meist(A,0,[]).\n meist([],_,[keine_weiteren_sendungen]).\n meist([HZuschauer|RZuschauer],N,[HZuschauer|RErgebnis]):-N1 is N-1, meist(RZuschauer, N1, RErgebnis).\n', [error(id(s7g1), penalty(0.8), poslist([pos(2, 0, 3)]), hint('An der Stelle von [keine_weiteren_sendungen] sollte eine leere Liste sein.'), highlighted(['meist(A, 0, []).
', 'meist([], _, [keine_weiteren_sendungen] ).
', 'meist([HZuschauer|RZuschauer], N, [HZuschauer|RErgebnis]):-N1 is N-1, meist(RZuschauer, N1, RErgebnis).
'])), error(id(s7k), penalty(0.8), poslist([pos(2, 0, 2, '_')]), hint('An der Stelle von _ erwarten wir eine Variable.'), highlighted(['meist(A, 0, []).
', 'meist([], _ , [keine_weiteren_sendungen]).
', 'meist([HZuschauer|RZuschauer], N, [HZuschauer|RErgebnis]):-N1 is N-1, meist(RZuschauer, N1, RErgebnis).
'])), error(id(s8a), penalty(0.1), poslist([pos(2, 0, 2, '_')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable _ und einer Zahl.'), highlighted(['meist(A, 0, []).
', 'meist([], _ , [keine_weiteren_sendungen]).
', 'meist([HZuschauer|RZuschauer], N, [HZuschauer|RErgebnis]):-N1 is N-1, meist(RZuschauer, N1, RErgebnis).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 1, 'A')]), hint('A: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['meist( A , 0, []).
', 'meist([], _, [keine_weiteren_sendungen]).
', 'meist([HZuschauer|RZuschauer], N, [HZuschauer|RErgebnis]):-N1 is N-1, meist(RZuschauer, N1, RErgebnis).
']))], [nok], ['stimmt, allerdings stimmt die Praedikatsdeklaration in der Studentenloesung auch nicht mit der manuellen Praedikatsdeklaration ueberein'], ''). test(exer11, 7, [declaration(sp, gesehen, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehenen), d('A3', -, list, 'EndListe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, gesehen, 3, gesehen/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, gesehen, 3, gesehen/3, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, gesehen, 3, gesehen/3, main, 'A3', 3, -, list, 'Endliste'))], 'gesehen(_,0,[]).\n gesehen([Eintrag|Rest],N,[Eintrag|Rest2]):- gesehen(Rest,Z,Rest2), Z is N-1.\n', [error(id(s7g), penalty(0.01), poslist([]), hint('Ein Rekursionsabschluss fehlt.'), highlighted([' gesehen(_, 0, []) .
', ' gesehen([Eintrag|Rest], N, [Eintrag|Rest2]) :- gesehen(Rest, Z, Rest2) , Z is N-1 .
'])), error(id(s4b5), penalty(0.3), poslist([pos(2, 2, 1, 'Z'), pos(2, 1, 2, 'Z')]), hint('Das Ergebnis einer arithmetischen Evaluation Z muss in ein nachfolgendes Subziel übergeben werden. Tauschen Sie die Reihenfolge des 2 .ten Subziels und des 1 .ten Subziels.'), highlighted(['gesehen(_, 0, []).
', 'gesehen([Eintrag|Rest], N, [Eintrag|Rest2]):-gesehen(Rest, Z , Rest2), Z is N-1.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer11, 8, [declaration(sp, beliebt, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehene), d('A3', -, list, 'neue Liste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, beliebt, 3, beliebt/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, beliebt, 3, beliebt/3, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, beliebt, 3, beliebt/3, main, 'A3', 3, -, list, 'Endliste'))], 'beliebt(_,0,_).\n beliebt([Kgeg|Rgeg],Anzahl,[Kgeg|R]):- Anzahl1 is Anzahl - 1, beliebt(Rgeg,Anzahl1,R).\n', [error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 3)]), hint('An der Stelle von _ sollte eine leere Liste sein.'), highlighted(['beliebt(_, 0, _ ).
', 'beliebt([Kgeg|Rgeg], Anzahl, [Kgeg|R]):-Anzahl1 is Anzahl-1, beliebt(Rgeg, Anzahl1, R).
'])), error(id(s7g), penalty(0.01), poslist([]), hint('Ein Rekursionsabschluss fehlt.'), highlighted([' beliebt(_, 0, _) .
', ' beliebt([Kgeg|Rgeg], Anzahl, [Kgeg|R]) :- Anzahl1 is Anzahl-1 , beliebt(Rgeg, Anzahl1, R) .
']))], [ok, ok], [korrekt, korrekt], ''). test(exer11, 10, [declaration(sp, zuschauer, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehene), d('A3', -, list, 'neue Liste')])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, zuschauer, 3, zuschauer/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, zuschauer, 3, zuschauer/3, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, zuschauer, 3, zuschauer/3, main, 'A3', 3, -, list, 'Endliste'))], 'zuschauer([],_,[]).\n zuschauer([],0,[]).\n zuschauer([H|T],N1,[H2|T2]):-zuschauer(T,N,T2), N=N1-1.\n', [error(id(s7k), penalty(0.8), poslist([pos(1, 0, 2, '_')]), hint('An der Stelle von _ erwarten wir eine Variable.'), highlighted(['zuschauer([], _ , []).
', 'zuschauer([], 0, []).
', 'zuschauer([H|T], N1, [H2|T2]):-zuschauer(T, N, T2), N=N1-1.
'])), error(id(s5a), penalty(0.1), poslist([pos(3, 1, 2, 'N')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von N fehlt.'), highlighted(['zuschauer([], _, []).
', 'zuschauer([], 0, []).
', 'zuschauer([H|T], N1, [H2|T2]):-zuschauer(T, N , T2), N=N1-1.
'])), error(id(s4f), penalty(0.1), poslist([pos(3, 2, 1, 'N'), pos(3, 2, 2, 'N1'-1)]), hint('[N, N1-1]: Das Unifikationssubziel dieser Variablen/Terme ist überflüssig.'), highlighted(['zuschauer([], _, []).
', 'zuschauer([], 0, []).
', 'zuschauer([H|T], N1, [H2|T2]):-zuschauer(T, N, T2), N = N1-1 .
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['zuschauer([], _, []).
', 'zuschauer([], 0, []).
', 'zuschauer( [H|T] , N1, [H2|T2]):-zuschauer(T, N, T2), N=N1-1.
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 3, 'H2')]), hint('H2: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['zuschauer([], _, []).
', 'zuschauer([], 0, []).
', 'zuschauer([H|T], N1, [H2|T2] ):-zuschauer(T, N, T2), N=N1-1.
'])), error(id(s8a), penalty(0.1), poslist([pos(1, 0, 2, '_')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable _ und einer Zahl.'), highlighted(['zuschauer([], _ , []).
', 'zuschauer([], 0, []).
', 'zuschauer([H|T], N1, [H2|T2]):-zuschauer(T, N, T2), N=N1-1.
']))], [ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer11, 11, [declaration(sp, auswahl, [d('A1', +, number, 'Laenge'), d('A2', -, list, 'Liste')])], _G25381075, [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, -, list, ['neue Liste', 'Neue', 'neue Zuschauerliste', 'erzeugten Liste']), predicatedec(sp, auswahl, 2, auswahl/2, main, 'A2', 2, -, list, 'Liste')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge', 'N', 'meistgesehenen Sendungen']), predicatedec(sp, auswahl, 2, auswahl/2, main, 'A1', 1, +, number, 'Laenge'))], 'Meist(0, []).\n Meist(N, [H|T]):- N1 is N-1, meist(N1, [T]).\n', [error(id(d2a), penalty(0.1), poslist([pred, auswahl]), hint('Die Deklaration für das Prädikat auswahl hat weniger Argumentstellen als erforderlich.'))], [ok], [korrekt], ''). test(exer11, 12, [declaration(sp, meistgesehen, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehene), d('A3', -, list, 'neue Liste')])], [recursivecase, basecase, basecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, meistgesehen, 3, meistgesehen/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, meistgesehen, 3, meistgesehen/3, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, +, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, meistgesehen, 3, meistgesehen/3, main, 'A3', 3, -, list, 'Endliste'))], 'meistgesehen(X,N,Resultat):- N>0, X=[H|T], H=[_,Sendung|_], N1 is N-1, meistgesehen(T,N1,R1), Resultat=[Sendung|R1].\n meistgesehen(_,0,[]).\n meistgesehen([],_,[]).\n', [error(id(s7k), penalty(0.8), poslist([pos(3, 0, 2, '_')]), hint('An der Stelle von _ erwarten wir eine Variable.'), highlighted(['meistgesehen(X, N, Resultat):-N>0, X=[H|T], H=[_, Sendung|_], N1 is N-1, meistgesehen(T, N1, R1), Resultat=[Sendung|R1].
', 'meistgesehen(_, 0, []).
', 'meistgesehen([], _ , []).
'])), error(id(s8a1), penalty(0.1), poslist([pos(1, 1)]), hint('Dieser arithmetische Vergleich scheint, überflüssig zu sein.'), highlighted(['meistgesehen(X, N, Resultat):- N>0 , X=[H|T], H=[_, Sendung|_], N1 is N-1, meistgesehen(T, N1, R1), Resultat=[Sendung|R1].
', 'meistgesehen(_, 0, []).
', 'meistgesehen([], _, []).
'])), error(id(s1d1), penalty(0.5), poslist([pos(1, 2, 2, 'H'), pos(1, 6, 2, ['Sendung'|'R1'])]), hint(' Eine Unifikation zwischen der Variable H und einer Variable des Terms [Sendung|R1] is erforderlich.'), highlighted(['meistgesehen(X, N, Resultat):-N>0, X= [H|T] , H=[_, Sendung|_], N1 is N-1, meistgesehen(T, N1, R1), Resultat= [Sendung|R1] .
', 'meistgesehen(_, 0, []).
', 'meistgesehen([], _, []).
'])), error(id(s8a), penalty(0.1), poslist([pos(3, 0, 2, '_')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable _ und einer Zahl.'), highlighted(['meistgesehen(X, N, Resultat):-N>0, X=[H|T], H=[_, Sendung|_], N1 is N-1, meistgesehen(T, N1, R1), Resultat=[Sendung|R1].
', 'meistgesehen(_, 0, []).
', 'meistgesehen([], _ , []).
']))], [nok, nok, ok, ok], ['is eigentlich eine Variable', 'wieso?', korrekt, korrekt], ''). test(exer11, 13, [declaration(sp, neu, [d('A1', +, list, 'Liste'), d('A2', -, list, 'neue Liste'), d('A3', +, number, meistgesehene)])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, neu, 3, neu/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, neu, 3, neu/3, main, 'A3', 3, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, -, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, neu, 3, neu/3, main, 'A2', 2, -, list, 'Endliste'))], 'neu([],[],_).\n neu(_,[],0).\n neu([X|Y],[X|Z],N):- N1 is N-1, neu(Y,Z, N1).\n', [error(id(s7k), penalty(0.8), poslist([pos(1, 0, 3, '_')]), hint('An der Stelle von _ erwarten wir eine Variable.'), highlighted(['neu([], [], _ ).
', 'neu(_, [], 0).
', 'neu([X|Y], [X|Z], N):-N1 is N-1, neu(Y, Z, N1).
'])), error(id(s8a), penalty(0.1), poslist([pos(1, 0, 3, '_')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable _ und einer Zahl.'), highlighted(['neu([], [], _ ).
', 'neu(_, [], 0).
', 'neu([X|Y], [X|Z], N):-N1 is N-1, neu(Y, Z, N1).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer11, 14, [declaration(sp, m_s, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehene), d('A3', -, list, 'neue Liste')])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, m_s, 3, m_s/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, m_s, 3, m_s/3, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, -, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, m_s, 3, m_s/3, main, 'A3', 3, -, list, 'Endliste'))], 'm_s([_],0,[]).\n m_s(E, Z, E):-Z>length(E).\n m_s([H|TE], Z, [H|TA]):-Z1 is Z-1, m_s(TE, Z1, TA).\n', [error(id(s7g1), penalty(0.8), poslist([pos(2, 0, 3)]), hint('An der Stelle von E sollte eine leere Liste sein.'), highlighted(['m_s([_], 0, []).
', 'm_s(E, Z, E ):-Z>length(E).
', 'm_s([H|TE], Z, [H|TA]):-Z1 is Z-1, m_s(TE, Z1, TA).
'])), error(id(s7g1), penalty(0.8), poslist([pos(2, 0, 1)]), hint('An der Stelle von E sollte eine leere Liste sein.'), highlighted(['m_s([_], 0, []).
', 'm_s( E , Z, E):-Z>length(E).
', 'm_s([H|TE], Z, [H|TA]):-Z1 is Z-1, m_s(TE, Z1, TA).
'])), error(id(s8c), penalty(0.5), poslist([pos(2, 1)]), hint('Ein Operand ist nicht korrekt. Der Operator: > ist erforderlich.'), highlighted(['m_s([_], 0, []).
', 'm_s(E, Z, E):- Z>length(E) .
', 'm_s([H|TE], Z, [H|TA]):-Z1 is Z-1, m_s(TE, Z1, TA).
'])), error(id(s8g), penalty(0.5), poslist([pos(2, 1, 2, length('E'))]), hint('Der Typ dieses Arguments scheint nicht richtig zu sein.'), highlighted(['m_s([_], 0, []).
', 'm_s(E, Z, E):-Z> length(E) .
', 'm_s([H|TE], Z, [H|TA]):-Z1 is Z-1, m_s(TE, Z1, TA).
']))], [ok, ok, ok, nok], [korrekt, korrekt, 'Der Operator > is vorhanden', 'Sprachlich vielleicht besser: length(E) liefert keinen Integer-Wert'], ''). test(exer11, 15, [declaration(sp, neulist, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehene), d('A3', -, list, 'neue Liste')])], [basecase, recursivecase, basecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, neulist, 3, neulist/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, neulist, 3, neulist/3, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, -, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, neulist, 3, neulist/3, main, 'A3', 3, -, list, 'Endliste'))], 'neulist(_,0,[_]).\n neulist([First|AltList],N,[First|Neulist]):- N2 is N-1, neulist(AltList,N2,Neulist).\n neulist([], N, []).\n', [error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 3)]), hint('An der Stelle von [_] sollte eine leere Liste sein.'), highlighted(['neulist(_, 0, [_] ).
', 'neulist([First|AltList], N, [First|Neulist]):-N2 is N-1, neulist(AltList, N2, Neulist).
', 'neulist([], N, []).
'])), error(id(s8a), penalty(0.1), poslist([pos(3, 0, 2, 'N')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable N und einer Zahl.'), highlighted(['neulist(_, 0, [_]).
', 'neulist([First|AltList], N, [First|Neulist]):-N2 is N-1, neulist(AltList, N2, Neulist).
', 'neulist([], N , []).
'])), error(id(post5b), penalty(0.8), poslist([pos(3, 0, 2, 'N')]), hint('N: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['neulist(_, 0, [_]).
', 'neulist([First|AltList], N, [First|Neulist]):-N2 is N-1, neulist(AltList, N2, Neulist).
', 'neulist([], N , []).
']))], [ok, ok, ok], [korrekt, korrekt, korrekt], ''). test(exer11, 16, [declaration(sp, meist, [d('A1', +, number, meistgesehene), d('A2', +, list, 'Liste'), d('A3', -, list, 'neue Liste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, meist, 3, meist/3, main, 'A2', 2, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, meist, 3, meist/3, main, 'A1', 1, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, -, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, meist, 3, meist/3, main, 'A3', 3, -, list, 'Endliste'))], 'meist(0, [], []).\n meist(N, [H|T], [H|R]):- N1 is N-1, meist(N1, T, R).\n', [error(id(s7g), penalty(0.01), poslist([]), hint('Ein Rekursionsabschluss fehlt.'), highlighted([' meist(0, [], []) .
', ' meist(N, [H|T], [H|R]) :- N1 is N-1 , meist(N1, T, R) .
']))], [ok], [korrekt], ''). test(exer11, 17, [declaration(sp, meist, [d('A1', +, list, 'Liste'), d('A2', +, number, meistgesehene), d('A3', -, list, 'neue Liste')])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg1', 1, +, list, ['Liste, Gesamtliste']), predicatedec(sp, meist, 3, meist/3, main, 'A1', 1, +, list, 'Zuschauerzahlen')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg2', 2, +, number, ['Laenge, meistgegehene Sendungen']), predicatedec(sp, meist, 3, meist/3, main, 'A2', 2, +, number, 'Laenge')), map(dec, predicatedec(tp, anfang, 3, anfang/3, main, 'Arg3', 3, -, list, ['Anfang, erzeugte Liste, Endliste']), predicatedec(sp, meist, 3, meist/3, main, 'A3', 3, -, list, 'Endliste'))], 'meist([],_,[]).\n meist(_,0,[]).\n meist([H|T], N, [H|Y]):- N1 is N-1, meist(T, N1, Y).\n', [error(id(s7k), penalty(0.8), poslist([pos(1, 0, 2, '_')]), hint('An der Stelle von _ erwarten wir eine Variable.'), highlighted(['meist([], _ , []).
', 'meist(_, 0, []).
', 'meist([H|T], N, [H|Y]):-N1 is N-1, meist(T, N1, Y).
'])), error(id(s8a), penalty(0.1), poslist([pos(1, 0, 2, '_')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen der Variable _ und einer Zahl.'), highlighted(['meist([], _ , []).
', 'meist(_, 0, []).
', 'meist([H|T], N, [H|Y]):-N1 is N-1, meist(T, N1, Y).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 1, [declaration(sp, kohle, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, kohle, 2, kohle/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, kohle, 2, kohle/2, main, 'A2', 2, -, number, 'Summe'))], 'kohle([],0).\n kohle([Name,Geld|Tail], Ges):-kohle([Tail], GZ), Ges is Geld + GZ.\n', [error(id(s3a), penalty(0.1), poslist([pos(2, 0, 1, ['Name', 'Geld'|'Tail']), pos(2, 1, 1, ['Tail'])]), hint('[Name, Geld|Tail]: sollte rekursiv ab/aufgebaut werden.'), highlighted(['kohle([], 0).
', 'kohle( [Name, Geld|Tail] , Ges):-kohle( [Tail] , GZ), Ges is Geld+GZ.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Name')]), hint('Name: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['kohle([], 0).
', 'kohle( [Name, Geld|Tail] , Ges):-kohle([Tail], GZ), Ges is Geld+GZ.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 2, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], 0).\n summe([_,Gehalt|Rest], Betrag):-summe(Rest, Betrag1), Betrag is Betrag1+Gehalt.\n', [], [], [], korrekt). test(exer12, 3, [declaration(sp, gehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, number, 'Summe'))], 'gehalt([],0).\n gehalt([N1,G1|Rest], Gehalt):-gehalt(Rest, GehaltZ), Gehalt is GehaltZ+G1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'N1')]), hint('N1: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['gehalt([], 0).
', 'gehalt( [N1, G1|Rest] , Gehalt):-gehalt(Rest, GehaltZ), Gehalt is GehaltZ+G1.
']))], [ok], [korrekt], ''). test(exer12, 4, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], S):-S is 0.\n summe([X|[Y|Rest]], S):- summe(Rest, SNeu), S is Y+SNeu.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von S erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([], S ):-S is 0.
', 'summe([X, Y|Rest], S):-summe(Rest, SNeu), S is Y+SNeu.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'X')]), hint('X: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['summe([], S):-S is 0.
', 'summe( [X, Y|Rest] , S):-summe(Rest, SNeu), S is Y+SNeu.
'])), error(id(s5b), penalty(0.1), poslist([pos(1, 1)]), hint('S is 0 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['summe([], S):- S is 0 .
', 'summe([X, Y|Rest], S):-summe(Rest, SNeu), S is Y+SNeu.
']))], [ok, ok, ok], [korrekt, korrekt, korrekt], ''). test(exer12, 5, [declaration(sp, gehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, addlist, gehalt/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, addlist, 3, gehalt/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, addlist, 3, gehalt/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, addlist, 3, gehalt/2, accu, 'A2', 2, +, number, accu))], 'gehalt(LS, G):-addlist(LS,0,G).\n addlist([], R, R).\n addlist([_, K|R], A, Res):- A1 is A+K, addlist(R, A1, Res).\n', [], [], [], korrekt). test(exer12, 6, [declaration(sp, sum, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, sum, 2, sum/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, sum, 2, sum/2, main, 'A2', 2, -, number, 'Summe'))], 'sum([],0).\n sum([A,B|C], S1):-sum(C, S2), S1 is S2+B.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['sum([], 0).
', 'sum( [A, B|C] , S1):-sum(C, S2), S1 is S2+B.
']))], [ok], [korrekt], ''). test(exer12, 7, [declaration(sp, gehaelter, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaelter, 2, gehaelter/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaelter, 2, gehaelter/2, main, 'A2', 2, -, number, 'Summe'))], 'gehaelter([], 0).\n gehaelter([[Name|Geh]|Rest], Summe):- gehaelter(Rest, ZS), Summe is Geh+ZS.\n', [error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, [['Name'|'Geh']|'Rest'])]), hint('[[Name|Geh]|Rest]: Dieses Argument sollte in folgender Form zerlegt werden: [Name, Gehalt|Rest]'), highlighted(['gehaelter([], 0).
', 'gehaelter( [[Name|Geh]|Rest] , Summe):-gehaelter(Rest, ZS), Summe is Geh+ZS.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Name')]), hint('Name: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['gehaelter([], 0).
', 'gehaelter( [[Name|Geh]|Rest] , Summe):-gehaelter(Rest, ZS), Summe is Geh+ZS.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 8, [declaration(sp, sum, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, sum, 2, sum/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, sum, 2, sum/2, main, 'A2', 2, -, number, 'Summe'))], 'sum([], 0).\n sum([_,Gehalt|R], Summe):-sum(R, ZwiSumme), Summe is ZwiSumme+Gehalt.\n', [], [], [], korrekt). test(exer12, 9, [declaration(sp, gehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, gh, gehalt/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gh, 3, gehalt/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, gh, 3, gehalt/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, gh, 3, gehalt/2, accu, 'A2', 2, +, number, accu))], 'gehalt(LS, G):-gh(LS,0,G).\n gh([], X,X).\n gh([_,G|R], A, R):-GS is A+G, gh(R,GS,R).\n', [error(id(s4a1), penalty(0.5), poslist([pos(3, 0, 3, 'R'), pos(3, 2, 1, 'R')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['gehalt(LS, G):-gh(LS, 0, G).
', 'gh([], X, X).
', 'gh([_, G|R], A, R ):-GS is A+G, gh( R , GS, R).
'])), error(id(s4d), penalty(0.5), poslist([pos(3, 2, 1, 'R'), pos(3, 2, 3, 'R')]), hint('Die Unifikation zwischen R und R ist nicht erforderlich.'), highlighted(['gehalt(LS, G):-gh(LS, 0, G).
', 'gh([], X, X).
', 'gh([_, G|R], A, R):-GS is A+G, gh( R , GS, R ).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 10, [declaration(sp, f, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Gehaltsliste')])], [basecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, f, 2, f/2, main, 'A2', 2, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, f, 2, f/2, main, 'A1', 1, -, number, 'Summe'))], 'f(0,[]).\n', [error(id(pre3a), penalty(0.3), poslist([pos(1)]), hint('Sie haben diese Klausel als Rekursionsabschluss gewählt. Jedoch fehlt eine dazugehörige Rekursionsklausel, oder diese Klausel ist kein Rekursionsabschluss.'), highlighted([' f(0, []) .
']))], [ok], [korrekt], ''). test(exer12, 12, [declaration(sp, gesamt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gesamt, 2, gesamt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gesamt, 2, gesamt/2, main, 'A2', 2, -, number, 'Summe'))], 'gesamt([], 0).\n gesamt([_,H|T], N):- N is H+N1, gesamt(T,N1).\n', [error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['gesamt([], 0).
', 'gesamt([_, H|T], N):- N is H+N1 , gesamt(T, N1) .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'N1')]), hint('N1 muss gebunden sein, bevor das Kalkulationssubziel N is H+N1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['gesamt([], 0).
', 'gesamt([_, H|T], N):-N is H+N1 , gesamt(T, N1).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 14, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([],0).\n summe([_,Zahl|Rest], Ergebnis):-summe(Rest, Ergebnis1), Ergebnis is Ergebnis1+Zahl.\n', [], [], [], korrekt). test(exer12, 15, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe(Liste, Ergebnis):-L1=[K1,K2|R1], X is Ergebnis+K2, summe(R1,X).\n', [error(id(s7e), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von Liste sollte eine Nicht-Leer-Liste sein.'), highlighted(['summe( Liste , Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2, summe(R1, X).
'])), error(id(s7g), penalty(0.01), poslist([]), hint('Ein Rekursionsabschluss fehlt.'), highlighted([' summe(Liste, Ergebnis) :- L1=[K1, K2|R1] , X is Ergebnis+K2 , summe(R1, X) .
'])), error(id(s1a), penalty(0.1), poslist([pos(1, 0, 1, 'Liste')]), hint('An der Stelle von Liste sollte eine (De-)Komposition stattfinden.'), highlighted(['summe( Liste , Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2, summe(R1, X).
'])), error(id(s1h), penalty(0.1), poslist([pos(1, 1)]), hint('[K1, K2|R1]: Diese (De-)Komposition ist überflüssig.'), highlighted(['summe(Liste, Ergebnis):- L1=[K1, K2|R1] , X is Ergebnis+K2, summe(R1, X).
'])), error(id(s3a), penalty(0.1), poslist([pos(1, 0, 1, 'Liste'), pos(1, 3, 1, 'R1')]), hint('Liste: sollte rekursiv ab/aufgebaut werden.'), highlighted(['summe( Liste , Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2, summe( R1 , X).
'])), error(id(s3fa), penalty(0.7), poslist([pos(1, 3), pos(1, 2)]), hint('Das rekursive Subziel 3 muss vor dem 2. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['summe(Liste, Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2 , summe(R1, X) .
'])), error(id(s5a), penalty(0.1), poslist([pos(1, 0, 2, 'Ergebnis')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Ergebnis fehlt.'), highlighted(['summe(Liste, Ergebnis ):-L1=[K1, K2|R1], X is Ergebnis+K2, summe(R1, X).
'])), error(id(s6b1), penalty(0.7), poslist([pos(1, 2, 2, 'K2'), pos(1, 3, 2, 'X')]), hint('K2 sollte mit der Argumentstelle von X, oder K2 sollte mit der richtigen Variable im Term X koreferieren.'), highlighted(['summe(Liste, Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2 , summe(R1, X ).
'])), error(id(s4b1), penalty(0.3), poslist([pos(1, 2, 1, 'X'), pos(1, 0, 2, 'Ergebnis')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere X und Ergebnis'), highlighted(['summe(Liste, Ergebnis ):-L1=[K1, K2|R1], X is Ergebnis+K2, summe(R1, X).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 1, 'Liste')]), hint('Liste: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe( Liste , Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2, summe(R1, X).
'])), error(id(post5c), penalty(0.8), poslist([pos(1, 1, 1, 'L1')]), hint('L1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe(Liste, Ergebnis):- L1 =[K1, K2|R1], X is Ergebnis+K2, summe(R1, X).
'])), error(id(post5c), penalty(0.8), poslist([pos(1, 1, 2, 'K1')]), hint('K1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe(Liste, Ergebnis):-L1= [K1, K2|R1] , X is Ergebnis+K2, summe(R1, X).
'])), error(id(post7b), penalty(0.8), poslist([pos(1, 2, 2, 'Ergebnis')]), hint('Ergebnis muss gebunden sein, bevor das Kalkulationssubziel X is Ergebnis+K2 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['summe(Liste, Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2 , summe(R1, X).
'])), error(id(post7b), penalty(0.8), poslist([pos(1, 2, 2, 'K2')]), hint('K2 muss gebunden sein, bevor das Kalkulationssubziel X is Ergebnis+K2 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['summe(Liste, Ergebnis):-L1=[K1, K2|R1], X is Ergebnis+K2 , summe(R1, X).
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, '', korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 16, [declaration(sp, calc, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, calc, 2, calc/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, calc, 2, calc/2, main, 'A2', 2, -, number, 'Summe'))], 'calc([],0).\n calc([_,G|R], X):-calc(R,Y), Y is X-G.\n', [error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'X')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von X fehlt.'), highlighted(['calc([], 0).
', 'calc([_, G|R], X ):-calc(R, Y), Y is X-G.
'])), error(id(s9a), penalty(0.7), poslist([pos(2, 2)]), hint('Das Vorzeichen - des arithmetischen Terms [G] erfüllt nicht die Aufgabenstellung.'), highlighted(['calc([], 0).
', 'calc([_, G|R], X):-calc(R, Y), Y is X-G .
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 2, 2, 'X'), pos(2, 1, 2, 'Y')]), hint('X sollte mit der Argumentstelle von Y, oder X sollte mit der richtigen Variable im Term Y koreferieren.'), highlighted(['calc([], 0).
', 'calc([_, G|R], X):-calc(R, Y ), Y is X-G .
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'Y'), pos(2, 0, 2, 'X')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Y und X'), highlighted(['calc([], 0).
', 'calc([_, G|R], X ):-calc(R, Y), Y is X-G.
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 2, 2, 'X')]), hint('X muss gebunden sein, bevor das Kalkulationssubziel Y is X-G ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['calc([], 0).
', 'calc([_, G|R], X):-calc(R, Y), Y is X-G .
']))], [ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 18, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([],0).\n summe([_,A|R], S):-summe(R,S1), S is S1+A.\n', [], [], [], korrekt). test(exer12, 19, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], 0).\n summe([_,Gehalt|Rest],X):-summe(Rest, Y), X is Y+Gehalt.\n', [], [], [], korrekt). test(exer12, 20, [declaration(sp, sum, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, sum, 2, sum/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, sum, 2, sum/2, main, 'A2', 2, -, number, 'Summe'))], 'sum([],0).\n sum([_,Wert|Tail], S):-sum(Tail, Zw), S is Zw+Wert.\n', [], [], [], korrekt). test(exer12, 21, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], X):- X is 0.\n summe([_|[Gehalt|Rest]], X):- summe(Rest, X1), X is X1+Gehalt.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von X erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([], X ):-X is 0.
', 'summe([_, Gehalt|Rest], X):-summe(Rest, X1), X is X1+Gehalt.
'])), error(id(s5b), penalty(0.1), poslist([pos(1, 1)]), hint('X is 0 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['summe([], X):- X is 0 .
', 'summe([_, Gehalt|Rest], X):-summe(Rest, X1), X is X1+Gehalt.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 22, [declaration(sp, gehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, g, gehalt/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe'), d('A3', +, number, accu)])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, g, 3, gehalt/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, g, 3, gehalt/2, accu, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, g, 3, gehalt/2, accu, 'A3', 3, +, number, accu))], 'gehalt(Liste, Summe):-g(Liste, Summe, 0).\n g([], Summe, Summe).\n g([_,X|Tail], Summe, Akku):-Akku1 is Akku+X, g(Tail, Summe, Akku1).\n', [], [], [], korrekt). test(exer12, 23, [declaration(sp, myadd, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [recursivecase, basecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, myadd, 2, myadd/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, myadd, 2, myadd/2, main, 'A2', 2, -, number, 'Summe'))], 'myadd([_|[X|T]], R):-myadd(T, R1), R is R1+X.\n myadd([],0).\n', [], [], [], korrekt). test(exer12, 24, [declaration(sp, gehalt_sum, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt_sum, 2, gehalt_sum/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt_sum, 2, gehalt_sum/2, main, 'A2', 2, -, number, 'Summe'))], 'gehalt_sum([], 0).\n gehalt_sum([_,Kopf2|Rest], R):-gehalt_sum(Rest, R1), R is R1+Kopf2.\n', [], [], [], korrekt). test(exer12, 25, [declaration(sp, summe, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Gehaltsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, -, number, 'Summe'))], 'summe(0, []).\n summe(Wert, [A,B|R]):-Wert1 is Wert +B, summe(Wert1,R).\n', [error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['summe(0, []).
', 'summe(Wert, [A, B|R]):- Wert1 is Wert+B , summe(Wert1, R) .
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 1, 'Wert')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Wert fehlt.'), highlighted(['summe(0, []).
', 'summe( Wert , [A, B|R]):-Wert1 is Wert+B, summe(Wert1, R).
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 1, 2, 'Wert'), pos(2, 2, 1, 'Wert1')]), hint('Wert sollte mit der Argumentstelle von Wert1, oder Wert sollte mit der richtigen Variable im Term Wert1 koreferieren.'), highlighted(['summe(0, []).
', 'summe(Wert, [A, B|R]):-Wert1 is Wert+B , summe( Wert1 , R).
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 1, 1, 'Wert1'), pos(2, 0, 1, 'Wert')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Wert1 und Wert'), highlighted(['summe(0, []).
', 'summe( Wert , [A, B|R]):- Wert1 is Wert+B, summe(Wert1, R).
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['summe(0, []).
', 'summe(Wert, [A, B|R] ):-Wert1 is Wert+B, summe(Wert1, R).
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'Wert')]), hint('Wert muss gebunden sein, bevor das Kalkulationssubziel Wert1 is Wert+B ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['summe(0, []).
', 'summe(Wert, [A, B|R]):-Wert1 is Wert+B , summe(Wert1, R).
']))], [ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 26, [declaration(sp, summegehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summegehalt, 2, summegehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summegehalt, 2, summegehalt/2, main, 'A2', 2, -, number, 'Summe'))], 'summegehalt([],0).\n summegehalt([_,Gehalt|RestListe],Summe):-summegehalt(RestListe,Restsumme),Summe is Restsumme+Gehalt.\n', [], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 27, [declaration(sp, rechne, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, rechne, 2, rechne/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, rechne, 2, rechne/2, main, 'A2', 2, -, number, 'Summe'))], 'rechne([], 0).\n rechne([[Head|Zahl]|Tail], N):-rechne(Tail, N1), N is Zahl +N1.\n', [error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, [['Head'|'Zahl']|'Tail'])]), hint('[[Head|Zahl]|Tail]: Dieses Argument sollte in folgender Form zerlegt werden: [Name, Gehalt|Rest]'), highlighted(['rechne([], 0).
', 'rechne( [[Head|Zahl]|Tail] , N):-rechne(Tail, N1), N is Zahl+N1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Head')]), hint('Head: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['rechne([], 0).
', 'rechne( [[Head|Zahl]|Tail] , N):-rechne(Tail, N1), N is Zahl+N1.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 28, [declaration(sp, gehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, number, 'Summe'))], 'gehalt(Liste, Summe):- Liste=[G,_|[]], Summe=G.\n gehalt(Liste, Summe):- Liste=[G1,_,G2,_|T], gehalt([G3,_|T], Summe), G3 is G1+G2.\n', [error(id(s7d), penalty(0.8), poslist([pos(1, 2, 2, 'G')]), hint('An der Stelle von G erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe= G .
', 'gehalt(Liste, Summe):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe), G3 is G1+G2.
'])), error(id(s7g2), penalty(0.8), poslist([pos(1, 1, 2)]), hint('An der Stelle von [G, _] sollte eine leere Liste sein.'), highlighted(['gehalt(Liste, Summe):-Liste= [G, _] , Summe=G.
', 'gehalt(Liste, Summe):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe), G3 is G1+G2.
'])), error(id(s1e), penalty(0.5), poslist([pos(2, 1, 2, ['G1', '_', 'G2', '_'|'T'])]), hint('[G1, _, G2, _|T]: Dieses Argument sollte in folgender Form zerlegt werden: [Name, Gehalt|Rest]'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe=G.
', 'gehalt(Liste, Summe):-Liste= [G1, _, G2, _|T] , gehalt([G3, _|T], Summe), G3 is G1+G2.
'])), error(id(s3a), penalty(0.1), poslist([pos(2, 0, 1, 'Liste'), pos(2, 2, 1, ['G3', '_'|'T'])]), hint('Liste: sollte rekursiv ab/aufgebaut werden.'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe=G.
', 'gehalt( Liste , Summe):-Liste=[G1, _, G2, _|T], gehalt( [G3, _|T] , Summe), G3 is G1+G2.
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Summe')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Summe fehlt.'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe=G.
', 'gehalt(Liste, Summe ):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe), G3 is G1+G2.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 3, 2, 'G1'), pos(2, 1, 2, ['G1', '_', 'G2', '_'|'T'])]), hint('G1 sollte mit der Argumentstelle von [G1, _, G2, _|T], oder G1 sollte mit der richtigen Variable im Term [G1, _, G2, _|T] koreferieren.'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe=G.
', 'gehalt(Liste, Summe):-Liste= [G1, _, G2, _|T] , gehalt([G3, _|T], Summe), G3 is G1+G2 .
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 3, 2, 'G2'), pos(2, 2, 2, 'Summe')]), hint('G2 sollte mit der Argumentstelle von Summe, oder G2 sollte mit der richtigen Variable im Term Summe koreferieren.'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe=G.
', 'gehalt(Liste, Summe):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe ), G3 is G1+G2 .
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'Summe'), pos(2, 2, 2, 'Summe')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe=G.
', 'gehalt(Liste, Summe ):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe ), G3 is G1+G2.
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 3, 1, 'G3'), pos(2, 0, 2, 'Summe')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere G3 und Summe'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe=G.
', 'gehalt(Liste, Summe ):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe), G3 is G1+G2.
'])), error(id(s1h), penalty(0.1), poslist([pos(1, 1)]), hint('[G, _]: Diese (De-)Komposition ist überflüssig.'), highlighted(['gehalt(Liste, Summe):- Liste=[G, _] , Summe=G.
', 'gehalt(Liste, Summe):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe), G3 is G1+G2.
'])), error(id(s4f), penalty(0.1), poslist([pos(1, 2, 1, 'Summe'), pos(1, 2, 2, 'G')]), hint('[Summe, G]: Das Unifikationssubziel dieser Variablen/Terme ist überflüssig.'), highlighted(['gehalt(Liste, Summe):-Liste=[G, _], Summe = G .
', 'gehalt(Liste, Summe):-Liste=[G1, _, G2, _|T], gehalt([G3, _|T], Summe), G3 is G1+G2.
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 29, [declaration(sp, berechne, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, berechne, 2, berechne/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, berechne, 2, berechne/2, main, 'A2', 2, -, number, 'Summe'))], 'berechne([], 0).\n berechne([A,B|T], Res):-berechne(T, Res1), Res1 is Res1+B.\n', [error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Res')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Res fehlt.'), highlighted(['berechne([], 0).
', 'berechne([A, B|T], Res ):-berechne(T, Res1), Res1 is Res1+B.
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'Res1'), pos(2, 0, 2, 'Res')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Res1 und Res'), highlighted(['berechne([], 0).
', 'berechne([A, B|T], Res ):-berechne(T, Res1), Res1 is Res1+B.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['berechne([], 0).
', 'berechne( [A, B|T] , Res):-berechne(T, Res1), Res1 is Res1+B.
'])), error(id(post5b), penalty(0.8), poslist([pos(2, 0, 2, 'Res')]), hint('Res: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['berechne([], 0).
', 'berechne([A, B|T], Res ):-berechne(T, Res1), Res1 is Res1+B.
']))], [ok, ok, ok, ok], [korrekt, korrekt, '', korrekt], ''). test(exer12, 30, [declaration(sp, summiere, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summiere, 2, summiere/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summiere, 2, summiere/2, main, 'A2', 2, -, number, 'Summe'))], 'summiere([], 0).\n summiere([_|RestL], Betrag):-RestL=[BetragZ|Rest], summiere(Rest, Betrag1), Betrag is BetragZ+Betrag1.\n', [], [], [], korrekt). test(exer12, 31, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], Ergebnis).\n summe(Liste, Ergebnis):- Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis).\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von Ergebnis erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([], Ergebnis ).
', 'summe(Liste, Ergebnis):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 3), pos(2, 2)]), hint('Das rekursive Subziel 3 muss vor dem 2. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['summe([], Ergebnis).
', 'summe(Liste, Ergebnis):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt , summe(Rest, Ergebnis) .
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Ergebnis')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Ergebnis fehlt.'), highlighted(['summe([], Ergebnis).
', 'summe(Liste, Ergebnis ):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis).
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'Ergebnis'), pos(2, 3, 2, 'Ergebnis')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['summe([], Ergebnis).
', 'summe(Liste, Ergebnis ):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis ).
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'Ergebnis1'), pos(2, 0, 2, 'Ergebnis')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Ergebnis1 und Ergebnis'), highlighted(['summe([], Ergebnis).
', 'summe(Liste, Ergebnis ):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis).
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'Name')]), hint('Name: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe([], Ergebnis).
', 'summe(Liste, Ergebnis):-Liste= [Name, Gehalt|Rest] , Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis).
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 2, 1, 'Ergebnis1')]), hint('Ergebnis1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe([], Ergebnis).
', 'summe(Liste, Ergebnis):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis).
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 2, 2, 'Ergebnis')]), hint('Ergebnis muss gebunden sein, bevor das Kalkulationssubziel Ergebnis1 is Ergebnis+Gehalt ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['summe([], Ergebnis).
', 'summe(Liste, Ergebnis):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt , summe(Rest, Ergebnis).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Ergebnis')]), hint('Ergebnis: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe([], Ergebnis ).
', 'summe(Liste, Ergebnis):-Liste=[Name, Gehalt|Rest], Ergebnis1 is Ergebnis+Gehalt, summe(Rest, Ergebnis).
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 32, [declaration(sp, gehaltsum, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaltsum, 2, gehaltsum/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaltsum, 2, gehaltsum/2, main, 'A2', 2, -, number, 'Summe'))], 'gehaltsum([], 0).\n gehaltsum(Liste, Summe):- Liste=[_,Gehalt|Rest], gehaltsum(Rest, Summ1), Summe is Gehalt +Summ1.\n', [], [], [], korrekt). test(exer12, 33, [declaration(sp, sum, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, 'Accu'), d('A3', -, number, 'Summe')])], _G25389975, [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltssumme', 'Summe aller Gehälter']), predicatedec(sp, sum, 3, sum/3, main, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank', 'Gehaltsliste']), predicatedec(sp, sum, 3, sum/3, main, 'A1', 1, +, list, 'Gehaltsliste'))], 'sum([], N, 0).\n sum(L, N, R):-L=[K1,K2|Rest], N1 is N+2, sum(Rest, N1, R1), R is K2+R1.\n', [error(id(d2b), penalty(0.1), poslist([pred, sum]), hint('Die Deklaration für das Prädikat sum/3 hat mehr Argumentstellen als erforderlich.'))], [nok], ['nicht notwendigerweise, es koennte der Versuch der Akkumulator-Variante sein'], ''). test(exer12, 34, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, summe, summe/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [basecase, recursivecase, nonrecursive], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 3, summe/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, summe, 3, summe/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, summe, 3, summe/2, accu, 'A2', 2, +, number, accu))], 'summe([], X,X).\n summe([_,Gehalt|Rest], X,Y):-Z=X+Gehalt, summe(Rest,Z,Y).\n summe(Liste, Gesamtgehalt):-summe(Liste, 0, Gesamtgehalt).\n', [error(id(s5a), penalty(0.1), poslist([pos(2, 2, 2, 'Z')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Z fehlt.'), highlighted(['summe([], X, X).
', 'summe([_, Gehalt|Rest], X, Y):-Z=X+Gehalt, summe(Rest, Z , Y).
', 'summe(Liste, Gesamtgehalt):-summe(Liste, 0, Gesamtgehalt).
'])), error(id(s4f), penalty(0.1), poslist([pos(2, 1, 1, 'Z'), pos(2, 1, 2, 'X'+'Gehalt')]), hint('[Z, X+Gehalt]: Das Unifikationssubziel dieser Variablen/Terme ist überflüssig.'), highlighted(['summe([], X, X).
', 'summe([_, Gehalt|Rest], X, Y):- Z = X+Gehalt , summe(Rest, Z, Y).
', 'summe(Liste, Gesamtgehalt):-summe(Liste, 0, Gesamtgehalt).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 35, [declaration(sp, gehaelter_in_summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, gehalt, gehaelter_in_summe/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [basecase, recursivecase, nonrecursive], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaelter_in_summe, 2, gehaelter_in_summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaelter_in_summe, 2, gehaelter_in_summe/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt, 3, gehaelter_in_summe/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, gehalt, 3, gehaelter_in_summe/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, gehalt, 3, gehaelter_in_summe/2, accu, 'A2', 2, +, number, accu))], 'gehalt([],A,A).\n gehalt(L,A,R):-L=[K1,K2|Rest], A1 is A+K2, gehalt(Rest,A1,R).\n gehaelter_in_summe(L,R):- gehalt(L,0,R).\n', [error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'K1')]), hint('K1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['gehalt([], A, A).
', 'gehalt(L, A, R):-L= [K1, K2|Rest] , A1 is A+K2, gehalt(Rest, A1, R).
', 'gehaelter_in_summe(L, R):-gehalt(L, 0, R).
']))], [ok], [korrekt], ''). test(exer12, 37, [declaration(sp, gehaeltersumme1, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaeltersumme1, 2, gehaeltersumme1/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaeltersumme1, 2, gehaeltersumme1/2, main, 'A2', 2, -, number, 'Summe'))], 'gehaeltersumme1([], Summe).\n gehaeltersumme1(Liste, Summe):-Liste=[Name, Gehalt|Rest], NSumme is Summe +Gehalt, gehaeltersumme1(Rest, NSumme).\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von Summe erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['gehaeltersumme1([], Summe ).
', 'gehaeltersumme1(Liste, Summe):-Liste=[Name, Gehalt|Rest], NSumme is Summe+Gehalt, gehaeltersumme1(Rest, NSumme).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 3), pos(2, 2)]), hint('Das rekursive Subziel 3 muss vor dem 2. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['gehaeltersumme1([], Summe).
', 'gehaeltersumme1(Liste, Summe):-Liste=[Name, Gehalt|Rest], NSumme is Summe+Gehalt , gehaeltersumme1(Rest, NSumme) .
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Summe')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Summe fehlt.'), highlighted(['gehaeltersumme1([], Summe).
', 'gehaeltersumme1(Liste, Summe ):-Liste=[Name, Gehalt|Rest], NSumme is Summe+Gehalt, gehaeltersumme1(Rest, NSumme).
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 2, 2, 'Summe'), pos(2, 3, 2, 'NSumme')]), hint('Summe sollte mit der Argumentstelle von NSumme, oder Summe sollte mit der richtigen Variable im Term NSumme koreferieren.'), highlighted(['gehaeltersumme1([], Summe).
', 'gehaeltersumme1(Liste, Summe):-Liste=[Name, Gehalt|Rest], NSumme is Summe+Gehalt , gehaeltersumme1(Rest, NSumme ).
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'NSumme'), pos(2, 0, 2, 'Summe')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere NSumme und Summe'), highlighted(['gehaeltersumme1([], Summe).
', 'gehaeltersumme1(Liste, Summe ):-Liste=[Name, Gehalt|Rest], NSumme is Summe+Gehalt, gehaeltersumme1(Rest, NSumme).
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'Name')]), hint('Name: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['gehaeltersumme1([], Summe).
', 'gehaeltersumme1(Liste, Summe):-Liste= [Name, Gehalt|Rest] , NSumme is Summe+Gehalt, gehaeltersumme1(Rest, NSumme).
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 2, 2, 'Summe')]), hint('Summe muss gebunden sein, bevor das Kalkulationssubziel NSumme is Summe+Gehalt ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['gehaeltersumme1([], Summe).
', 'gehaeltersumme1(Liste, Summe):-Liste=[Name, Gehalt|Rest], NSumme is Summe+Gehalt , gehaeltersumme1(Rest, NSumme).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Summe')]), hint('Summe: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['gehaeltersumme1([], Summe ).
', 'gehaeltersumme1(Liste, Summe):-Liste=[Name, Gehalt|Rest], NSumme is Summe+Gehalt, gehaeltersumme1(Rest, NSumme).
']))], [ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 38, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([Name, Zahl|[]], Zahl).\n summe([Name,Zahl|Tail], R):- summe(Tail, R1), R is R1+Zahl.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von Zahl erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([Name, Zahl], Zahl ).
', 'summe([Name, Zahl|Tail], R):-summe(Tail, R1), R is R1+Zahl.
'])), error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [Name, Zahl] sollte eine leere Liste sein.'), highlighted(['summe( [Name, Zahl] , Zahl).
', 'summe([Name, Zahl|Tail], R):-summe(Tail, R1), R is R1+Zahl.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Name')]), hint('Name: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['summe([Name, Zahl], Zahl).
', 'summe( [Name, Zahl|Tail] , R):-summe(Tail, R1), R is R1+Zahl.
'])), error(id(post5a), penalty(0.8), poslist([pos(1, 0, 1, 'Name')]), hint('Name: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['summe( [Name, Zahl] , Zahl).
', 'summe([Name, Zahl|Tail], R):-summe(Tail, R1), R is R1+Zahl.
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 39, [declaration(sp, g_summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, addiere, g_summe/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, g_summe, 2, g_summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, g_summe, 2, g_summe/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, addiere, 3, g_summe/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, addiere, 3, g_summe/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, addiere, 3, g_summe/2, accu, 'A2', 2, +, number, accu))], 'g_summe(GListe,Summe):-addiere(GListe,0,Summe).\n addiere([],R,R).\n addiere([_,G|L],T,R):-G1 is G+T, addiere(L,G1, R).\n', [], [], [], korrekt). test(exer12, 40, [declaration(sp, g_summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, g_summe, g_summe/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, g_summe, 2, g_summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, g_summe, 2, g_summe/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, g_summe, 3, g_summe/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, g_summe, 3, g_summe/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, g_summe, 3, g_summe/2, accu, 'A2', 2, +, number, accu))], 'g_summe(GListe, Summe):-g_summe(GListe, 0, Summe).\n g_summe([], Akku, Akku).\n g_summe([[_,Gehalt]|Rest], Akku, Summe):-Akku2 is Akku+Gehalt, g_summe(Rest, Akku2, Summe).\n', [error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, [['_', 'Gehalt']|'Rest'])]), hint('[[_, Gehalt]|Rest]: Dieses Argument sollte in folgender Form zerlegt werden: [Name, Gehalt|Rest]'), highlighted(['g_summe(GListe, Summe):-g_summe(GListe, 0, Summe).
', 'g_summe([], Akku, Akku).
', 'g_summe( [[_, Gehalt]|Rest] , Akku, Summe):-Akku2 is Akku+Gehalt, g_summe(Rest, Akku2, Summe).
']))], [ok], [korrekt], ''). test(exer12, 41, [declaration(sp, gehaltssumme, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaltssumme, 2, gehaltssumme/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaltssumme, 2, gehaltssumme/2, main, 'A2', 2, -, number, 'Summe'))], 'gehaltssumme([], 0).\n gehaltssumme([_],0).\n gehaltssumme([H|[HT|T]],Summe):-gehaltssumme(T,S),Summe is HT+S.\n', [error(id(s7i), penalty(0.01), poslist([pos(2)]), hint('gehaltssumme/2: Die Prädikatsdefinition hat mehr Rekursionsabschlüsse als erforderlich.'), highlighted(['gehaltssumme([], 0).
', ' gehaltssumme([_], 0) .
', 'gehaltssumme([H, HT|T], Summe):-gehaltssumme(T, S), Summe is HT+S.
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['gehaltssumme([], 0).
', 'gehaltssumme([_], 0).
', 'gehaltssumme( [H, HT|T] , Summe):-gehaltssumme(T, S), Summe is HT+S.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 42, [declaration(sp, gehalt_sum, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt_sum, 2, gehalt_sum/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt_sum, 2, gehalt_sum/2, main, 'A2', 2, -, number, 'Summe'))], 'gehalt_sum([],0).\n gehalt_sum([Head, Head2|Tail], X):-gehalt_sum(Tail, X1), X is Head2 +X1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Head')]), hint('Head: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['gehalt_sum([], 0).
', 'gehalt_sum( [Head, Head2|Tail] , X):-gehalt_sum(Tail, X1), X is Head2+X1.
']))], [ok], [korrekt], ''). test(exer12, 43, [declaration(sp, addlist, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, addlist, 2, addlist/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, addlist, 2, addlist/2, main, 'A2', 2, -, number, 'Summe'))], 'addlist([], 0).\n addlist([_,K|Rest], E):-addlist(Rest, Ezw), E is Ezw+K.\n', [], [], [], korrekt). test(exer12, 44, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([_,X], X).\n summe([_,X|Rest], Y):-summe(Rest, X1), Y is X+X1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von X erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([_, X], X ).
', 'summe([_, X|Rest], Y):-summe(Rest, X1), Y is X+X1.
'])), error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [_, X] sollte eine leere Liste sein.'), highlighted(['summe( [_, X] , X).
', 'summe([_, X|Rest], Y):-summe(Rest, X1), Y is X+X1.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 45, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')]), declaration(sp, summeaccu, summe/2, accu, [d('A1', +, list, 'Gehaltsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/2, accu, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summeaccu, 3, summe/2, accu, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/3, accu, 'Arg2', 2, -, number, ['Gehaltsumme,Summe aller Gehälter']), predicatedec(sp, summeaccu, 3, summe/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysumaccu, 3, tpsalarysum/3, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, summeaccu, 3, summe/2, accu, 'A2', 2, +, number, accu))], 'summe(L,G):-summeaccu(L,0,G).\n summeaccu([],S,S).\n summeaccu([N,G|Rest],S,E):-S1 is S+G, summeaccu(Rest,S1,E).\n', [error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'N')]), hint('N: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['summe(L, G):-summeaccu(L, 0, G).
', 'summeaccu([], S, S).
', 'summeaccu( [N, G|Rest] , S, E):-S1 is S+G, summeaccu(Rest, S1, E).
']))], [ok], [korrekt], ''). test(exer12, 46, [declaration(sp, gehaltssumme, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaltssumme, 2, gehaltssumme/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaltssumme, 2, gehaltssumme/2, main, 'A2', 2, -, number, 'Summe'))], 'gehaltssumme([], 0).\n gehaltssumme([_,G|R], S):-gehaltssumme(R, S1), S is S1+G.\n', [], [], [], korrekt). test(exer12, 47, [declaration(sp, gehaelter, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Gehaltsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaelter, 2, gehaelter/2, main, 'A2', 2, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaelter, 2, gehaelter/2, main, 'A1', 1, -, number, 'Summe'))], 'gehaelter(0,[]).\n gehaelter(Summe,Liste):-Liste=[K1|R1], R1=[K2|R2], gehaelter(Summe,R2),Summe is Summe1+K2.\n', [error(id(s1e), penalty(0.5), poslist([pos(2, 1, 2, ['K1'|'R1'])]), hint('[K1|R1]: Dieses Argument sollte in folgender Form zerlegt werden: [Name, Gehalt|Rest]'), highlighted(['gehaelter(0, []).
', 'gehaelter(Summe, Liste):-Liste= [K1|R1] , R1=[K2|R2], gehaelter(Summe, R2), Summe is Summe1+K2.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 4, 2, 'Summe1'), pos(2, 3, 1, 'Summe')]), hint('Summe1 sollte mit der Argumentstelle von Summe, oder Summe1 sollte mit der richtigen Variable im Term Summe koreferieren.'), highlighted(['gehaelter(0, []).
', 'gehaelter(Summe, Liste):-Liste=[K1|R1], R1=[K2|R2], gehaelter( Summe , R2), Summe is Summe1+K2 .
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 1, 'Summe'), pos(2, 3, 1, 'Summe')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['gehaelter(0, []).
', 'gehaelter( Summe , Liste):-Liste=[K1|R1], R1=[K2|R2], gehaelter( Summe , R2), Summe is Summe1+K2.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'K1')]), hint('K1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['gehaelter(0, []).
', 'gehaelter(Summe, Liste):-Liste= [K1|R1] , R1=[K2|R2], gehaelter(Summe, R2), Summe is Summe1+K2.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 4, 2, 'Summe1')]), hint('Summe1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['gehaelter(0, []).
', 'gehaelter(Summe, Liste):-Liste=[K1|R1], R1=[K2|R2], gehaelter(Summe, R2), Summe is Summe1+K2 .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 4, 2, 'Summe1')]), hint('Summe1 muss gebunden sein, bevor das Kalkulationssubziel Summe is Summe1+K2 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['gehaelter(0, []).
', 'gehaelter(Summe, Liste):-Liste=[K1|R1], R1=[K2|R2], gehaelter(Summe, R2), Summe is Summe1+K2 .
']))], [ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 48, [declaration(sp, gehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehalt, 2, gehalt/2, main, 'A2', 2, -, number, 'Summe'))], 'gehalt([], 0).\n gehalt([K1,K2|R1], E):-gehalt(R1, E1), E is K2+E1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'K1')]), hint('K1: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['gehalt([], 0).
', 'gehalt( [K1, K2|R1] , E):-gehalt(R1, E1), E is K2+E1.
']))], [ok], [korrekt], ''). test(exer12, 49, [declaration(sp, rechne, [d('A2', -, number, 'Summe'), d('A1', +, list, 'Gehaltsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, rechne, 2, rechne/2, main, 'A2', 2, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, rechne, 2, rechne/2, main, 'A1', 1, -, number, 'Summe'))], 'rechne(E,L):-L=[Kopf|Rest],Kopf=E.\n rechne(E,L):-L=[Kopf/2|Rest].\n', [error(id(pre3a), penalty(0.3), poslist([pos(1)]), hint('Sie haben diese Klausel als Rekursionsabschluss gewählt. Jedoch fehlt eine dazugehörige Rekursionsklausel, oder diese Klausel ist kein Rekursionsabschluss.'), highlighted([' rechne(E, L) :- L=[Kopf|Rest] , Kopf=E .
', 'rechne(E, L):-L=[Kopf/2|Rest].
'])), error(id(pre3b), penalty(0.3), poslist([pos(2)]), hint('Sie haben diese Klausel als Rekursionsklausel gewählt, jedoch existiert kein rekursives Subziel in dieser Klausel.'), highlighted(['rechne(E, L):-L=[Kopf|Rest], Kopf=E.
', ' rechne(E, L) :- L=[Kopf/2|Rest] .
']))], [ok, ok], [korrekt, korrekt], ''). test(exer12, 50, [declaration(sp, sumgehalt, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, sumgehalt, 2, sumgehalt/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, sumgehalt, 2, sumgehalt/2, main, 'A2', 2, -, number, 'Summe'))], 'sumgehalt([],0).\n sumgehalt([Name,Gehalt|Rest], Summe):-sumgehalt(Rest,Sum1), Summe is Sum1+Gehalt.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Name')]), hint('Name: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['sumgehalt([], 0).
', 'sumgehalt( [Name, Gehalt|Rest] , Summe):-sumgehalt(Rest, Sum1), Summe is Sum1+Gehalt.
']))], [ok], [korrekt], ''). test(exer12, 51, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], 0).\n summe([_,Gehalt|Tail], R):-summe(Tail, R1), R is R1+ Gehalt.\n', [], [], [], korrekt). test(exer12, 52, [declaration(sp, length, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Liste')])], _G25394359, [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltssumme', 'Summe aller Gehälter']), predicatedec(sp, length, 2, length/2, main, 'A1', 1, -, number, 'Summe')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank', 'Gehaltsliste']), predicatedec(sp, length, 2, length/2, main, 'A2', 2, +, list, 'Liste'))], 'length(Gehalt, []).\n length(Gehalt, [_,Rest]):-length(Gehalt1, Rest), Gehalt is Name.\n', [error(id(d1a), penalty(0.1), poslist([pred, length]), hint('length ist der Name eines Systemprädikats und darf nicht verwendet werden.'))], [ok], [korrekt], ''). test(exer12, 53, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([_,X], X).\n summe(X,Y):- X=[Kopf1, Kopf2|Rest], summe(Rest, Y1), Y is Kopf2 +Y1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von X erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([_, X], X ).
', 'summe(X, Y):-X=[Kopf1, Kopf2|Rest], summe(Rest, Y1), Y is Kopf2+Y1.
'])), error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [_, X] sollte eine leere Liste sein.'), highlighted(['summe( [_, X] , X).
', 'summe(X, Y):-X=[Kopf1, Kopf2|Rest], summe(Rest, Y1), Y is Kopf2+Y1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'Kopf1')]), hint('Kopf1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe([_, X], X).
', 'summe(X, Y):-X= [Kopf1, Kopf2|Rest] , summe(Rest, Y1), Y is Kopf2+Y1.
']))], [ok, ok, ok], [korrekt, korrekt, korrekt], ''). test(exer12, 54, [declaration(sp, gehaltssumme, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [recursivecase, basecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, gehaltssumme, 2, gehaltssumme/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, gehaltssumme, 2, gehaltssumme/2, main, 'A2', 2, -, number, 'Summe'))], 'gehaltssumme(Gehaltsliste, Bisher):-[_,X|Rest], Y is X+Bisher, gehaltssumme(Rest, Y).\n gehaltssumme([], X).\n', [error(id(g7), penalty(0.5), poslist([pos(1, 1)]), hint('. / 2: Dieses Subziel ist unbekannt.'), highlighted(['gehaltssumme(Gehaltsliste, Bisher):- [_, X|Rest] , Y is X+Bisher, gehaltssumme(Rest, Y).
', 'gehaltssumme([], X).
']))], [ok], [korrekt], ''). test(exer12, 55, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], Erg).\n summe([_,Gehalt|Rest], Erg):-Erg is Erg1+Gehalt, summe(Rest, Erg1).\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von Erg erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([], Erg ).
', 'summe([_, Gehalt|Rest], Erg):-Erg is Erg1+Gehalt, summe(Rest, Erg1).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['summe([], Erg).
', 'summe([_, Gehalt|Rest], Erg):- Erg is Erg1+Gehalt , summe(Rest, Erg1) .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'Erg1')]), hint('Erg1 muss gebunden sein, bevor das Kalkulationssubziel Erg is Erg1+Gehalt ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['summe([], Erg).
', 'summe([_, Gehalt|Rest], Erg):-Erg is Erg1+Gehalt , summe(Rest, Erg1).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Erg')]), hint('Erg: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe([], Erg ).
', 'summe([_, Gehalt|Rest], Erg):-Erg is Erg1+Gehalt, summe(Rest, Erg1).
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 56, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([], R).\n summe([H|T], R1):-summe(T,R1), mod(length(H))=0, R1 is R+H.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von R erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([], R ).
', 'summe([H|T], R1):-summe(T, R1), mod(length(H))=0, R1 is R+H.
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['H'|'T'])]), hint('[H|T]: Dieses Argument sollte in folgender Form zerlegt werden: [Name, Gehalt|Rest]'), highlighted(['summe([], R).
', 'summe( [H|T] , R1):-summe(T, R1), mod(length(H))=0, R1 is R+H.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 3, 2, 'R'), pos(2, 0, 1, ['H'|'T'])]), hint('R sollte mit der Argumentstelle von [H|T], oder R sollte mit der richtigen Variable im Term [H|T] koreferieren.'), highlighted(['summe([], R).
', 'summe( [H|T] , R1):-summe(T, R1), mod(length(H))=0, R1 is R+H .
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 3, 2, 'H'), pos(2, 1, 2, 'R1')]), hint('H sollte mit der Argumentstelle von R1, oder H sollte mit der richtigen Variable im Term R1 koreferieren.'), highlighted(['summe([], R).
', 'summe([H|T], R1):-summe(T, R1 ), mod(length(H))=0, R1 is R+H .
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'R1'), pos(2, 1, 2, 'R1')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['summe([], R).
', 'summe([H|T], R1 ):-summe(T, R1 ), mod(length(H))=0, R1 is R+H.
'])), error(id(s4g), penalty(0.1), poslist([pos(2, 2, 1, mod(length('H'))), pos(2, 2, 2, 0)]), hint('[mod(length(H)), 0]: Das Unifikationssubziel dieser Variablen/Terme ist überflüssig.'), highlighted(['summe([], R).
', 'summe([H|T], R1):-summe(T, R1), mod(length(H)) = 0 , R1 is R+H.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 3, 2, 'R')]), hint('R: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe([], R).
', 'summe([H|T], R1):-summe(T, R1), mod(length(H))=0, R1 is R+H .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 3, 2, 'R')]), hint('R muss gebunden sein, bevor das Kalkulationssubziel R1 is R+H ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['summe([], R).
', 'summe([H|T], R1):-summe(T, R1), mod(length(H))=0, R1 is R+H .
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'R')]), hint('R: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['summe([], R ).
', 'summe([H|T], R1):-summe(T, R1), mod(length(H))=0, R1 is R+H.
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer12, 57, [declaration(sp, geh, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Gehaltsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, geh, 2, geh/2, main, 'A2', 2, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, geh, 2, geh/2, main, 'A1', 1, -, number, 'Summe'))], 'geh([], []).\n geh(Sum,[Kopf|Ende]):-Sum is Sum1+[Ende|Ende1], geh(Sum1, End1).\n', [error(id(pre2e), penalty(0.3), poslist([pos(1, 0, 1, [])]), hint('Der Typ von [] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['geh( [] , []).
', 'geh(Sum, [Kopf|Ende]):-Sum is Sum1+[Ende|Ende1], geh(Sum1, End1).
']))], [ok], [korrekt], ''). test(exer12, 58, [declaration(sp, summe, [d('A1', +, list, 'Gehaltsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg1', 1, +, list, ['Gehaltsdatenbank, Gehaltsliste']), predicatedec(sp, summe, 2, summe/2, main, 'A1', 1, +, list, 'Gehaltsliste')), map(dec, predicatedec(tp, tpsalarysum, 2, tpsalarysum/2, main, 'Arg2', 2, -, number, ['Gehaltsumme, Summe aller Gehälter']), predicatedec(sp, summe, 2, summe/2, main, 'A2', 2, -, number, 'Summe'))], 'summe([_,B],B).\n summe([_,B|C], X):-X is B+Z, summe(C,Z).\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von B erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['summe([_, B], B ).
', 'summe([_, B|C], X):-X is B+Z, summe(C, Z).
'])), error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [_, B] sollte eine leere Liste sein.'), highlighted(['summe( [_, B] , B).
', 'summe([_, B|C], X):-X is B+Z, summe(C, Z).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['summe([_, B], B).
', 'summe([_, B|C], X):- X is B+Z , summe(C, Z) .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'Z')]), hint('Z muss gebunden sein, bevor das Kalkulationssubziel X is B+Z ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['summe([_, B], B).
', 'summe([_, B|C], X):-X is B+Z , summe(C, Z).
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 1, [declaration(sp, zaehlen, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, zaehlen, 2, zaehlen/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, zaehlen, 2, zaehlen/2, main, 'A2', 2, -, number, 'Summe'))], 'zaehlen([],[]).\n zaehlen([H|T], X):-X is X+1, zaehlen([T],X).\n', [error(id(pre2e), penalty(0.3), poslist([pos(1, 0, 2, [])]), hint('Der Typ von [] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['zaehlen([], [] ).
', 'zaehlen([H|T], X):-X is X+1, zaehlen([T], X).
']))], [ok], [korrekt], ''). test(exer13, 2, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')]), declaration(sp, anz, anzahl/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anz, 3, anzahl/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anz, 3, anzahl/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, anz, 3, anzahl/2, accu, 'A2', 2, +, number, accu))], 'anzahl(Liste, Zahl):-anz(Liste, 0, Zahl).\n anz([], Acc, Acc).\n anz([_|Tail], Acc, Zahl):- Acc2 is Acc +1, anz(Tail, Acc2, Zahl).\n', [], [], [], korrekt). test(exer13, 3, [declaration(sp, fahrzeug, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, fahrzeug, 2, fahrzeug/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, fahrzeug, 2, fahrzeug/2, main, 'A2', 2, -, number, 'Summe'))], 'fahrzeug([],0).\n fahrzeug([K|R], N):-fahrzeug(R,N1), N is N1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['fahrzeug([], 0).
', 'fahrzeug( [K|R] , N):-fahrzeug(R, N1), N is N1+1.
']))], [ok], [korrekt], ''). test(exer13, 4, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([],0).\n anzahl([_|Rest], Anzahl):-Anzahl is Anzahl1+1, anzahl(Rest, Anzahl1).\n', [error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['anzahl([], 0).
', 'anzahl([_|Rest], Anzahl):- Anzahl is Anzahl1+1 , anzahl(Rest, Anzahl1) .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'Anzahl1')]), hint('Anzahl1 muss gebunden sein, bevor das Kalkulationssubziel Anzahl is Anzahl1+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['anzahl([], 0).
', 'anzahl([_|Rest], Anzahl):-Anzahl is Anzahl1+1 , anzahl(Rest, Anzahl1).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer13, 5, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(Z, Liste):-Liste=[], Z is 0.\n anzahl(Z, Liste):-Liste=[Kopf|Rest], anzahl(Z1, Rest), Z is Z1+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von Z erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['anzahl( Z , Liste):-Liste=[], Z is 0.
', 'anzahl(Z, Liste):-Liste=[Kopf|Rest], anzahl(Z1, Rest), Z is Z1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'Kopf')]), hint('Kopf: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['anzahl(Z, Liste):-Liste=[], Z is 0.
', 'anzahl(Z, Liste):-Liste= [Kopf|Rest] , anzahl(Z1, Rest), Z is Z1+1.
'])), error(id(s5b), penalty(0.1), poslist([pos(1, 2)]), hint('Z is 0 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['anzahl(Z, Liste):-Liste=[], Z is 0 .
', 'anzahl(Z, Liste):-Liste=[Kopf|Rest], anzahl(Z1, Rest), Z is Z1+1.
']))], [nok, ok, ok], ['Z ist 0', korrekt, korrekt], ''). test(exer13, 6, [declaration(sp, splength, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, -, number, 'Summe'))], 'splength(N,L):-L=[], N is 0.\n splength(N,L):-L=[Kopf,Rest], N is N1+1.\n', [error(id(pre3a), penalty(0.3), poslist([pos(1)]), hint('Sie haben diese Klausel als Rekursionsabschluss gewählt. Jedoch fehlt eine dazugehörige Rekursionsklausel, oder diese Klausel ist kein Rekursionsabschluss.'), highlighted([' splength(N, L) :- L=[] , N is 0 .
', 'splength(N, L):-L=[Kopf, Rest], N is N1+1.
'])), error(id(pre3b), penalty(0.3), poslist([pos(2)]), hint('Sie haben diese Klausel als Rekursionsklausel gewählt, jedoch existiert kein rekursives Subziel in dieser Klausel.'), highlighted(['splength(N, L):-L=[], N is 0.
', ' splength(N, L) :- L=[Kopf, Rest] , N is N1+1 .
']))], [ok, ok], [korrekt, korrekt], ''). test(exer13, 7, [declaration(sp, splength, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, -, number, 'Summe'))], 'splength(0,[]).\n splength(Bestand, [_|Rest]):-splength(Bestand1, Rest), Bestand is Bestand1 +1.\n', [], [], [], korrekt). test(exer13, 8, [declaration(sp, zaehlen, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, zaehlen, 2, zaehlen/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, zaehlen, 2, zaehlen/2, main, 'A2', 2, -, number, 'Summe'))], 'zaehlen(Bestandsliste, Anzahl):- Bestandsliste=[], Anzahl is 0.\n zaehlen(Bestandsliste, Anzahl):- Bestandsliste=[_|Rest], zaehlen(Rest, Anz), Anzahl is Anz+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von Anzahl erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['zaehlen(Bestandsliste, Anzahl ):-Bestandsliste=[], Anzahl is 0.
', 'zaehlen(Bestandsliste, Anzahl):-Bestandsliste=[_|Rest], zaehlen(Rest, Anz), Anzahl is Anz+1.
'])), error(id(s5b), penalty(0.1), poslist([pos(1, 2)]), hint('Anzahl is 0 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['zaehlen(Bestandsliste, Anzahl):-Bestandsliste=[], Anzahl is 0 .
', 'zaehlen(Bestandsliste, Anzahl):-Bestandsliste=[_|Rest], zaehlen(Rest, Anz), Anzahl is Anz+1.
']))], [nok, ok], ['Anzahl ist 0', korrekt], ''). test(exer13, 10, [declaration(sp, wieviel, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviel, 2, wieviel/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviel, 2, wieviel/2, main, 'A1', 1, -, number, 'Summe'))], 'wieviel(0,[]).\n wieviel(Anzahl, [H|Rest]):-wieviel(Anzahl1, Rest), Anzahl is Anzahl1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['wieviel(0, []).
', 'wieviel(Anzahl, [H|Rest] ):-wieviel(Anzahl1, Rest), Anzahl is Anzahl1+1.
']))], [ok], [korrekt], ''). test(exer13, 11, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')]), declaration(sp, length, anzahl/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, length, 3, anzahl/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, length, 3, anzahl/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, length, 3, anzahl/2, accu, 'A2', 2, +, number, accu))], 'anzahl(Liste, Zahl):-length(Liste, 0, Zahl).\n length([],A,A).\n length([_,T],Acc, E):-Acc1 is Acc+1, length(T,Acc1, E).\n', [error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['_', 'T'])]), hint('[_, T]: Dieses Argument sollte in folgender Form zerlegt werden: [Auto|Rest]'), highlighted(['anzahl(Liste, Zahl):-length(Liste, 0, Zahl).
', 'length([], A, A).
', 'length( [_, T] , Acc, E):-Acc1 is Acc+1, length(T, Acc1, E).
']))], [ok], [korrekt], ''). test(exer13, 12, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([],0).\n bestand([H|T], N):-N is NT+1, bestand(T,NT).\n', [error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['bestand([], 0).
', 'bestand([H|T], N):- N is NT+1 , bestand(T, NT) .
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['bestand([], 0).
', 'bestand( [H|T] , N):-N is NT+1, bestand(T, NT).
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'NT')]), hint('NT muss gebunden sein, bevor das Kalkulationssubziel N is NT+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['bestand([], 0).
', 'bestand([H|T], N):-N is NT+1 , bestand(T, NT).
']))], [ok, ok, ok], [korrekt, korrekt, korrekt], ''). test(exer13, 13, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([], Anzahl).\n bestand([Kopf|Rest], Anzahl):-Restanzahl is Anzahl+1, bestand(Rest, Restanzahl).\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von Anzahl erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['bestand([], Anzahl ).
', 'bestand([Kopf|Rest], Anzahl):-Restanzahl is Anzahl+1, bestand(Rest, Restanzahl).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['bestand([], Anzahl).
', 'bestand([Kopf|Rest], Anzahl):- Restanzahl is Anzahl+1 , bestand(Rest, Restanzahl) .
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Anzahl')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Anzahl fehlt.'), highlighted(['bestand([], Anzahl).
', 'bestand([Kopf|Rest], Anzahl ):-Restanzahl is Anzahl+1, bestand(Rest, Restanzahl).
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 1, 2, 'Anzahl'), pos(2, 2, 2, 'Restanzahl')]), hint('Anzahl sollte mit der Argumentstelle von Restanzahl, oder Anzahl sollte mit der richtigen Variable im Term Restanzahl koreferieren.'), highlighted(['bestand([], Anzahl).
', 'bestand([Kopf|Rest], Anzahl):-Restanzahl is Anzahl+1 , bestand(Rest, Restanzahl ).
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 1, 1, 'Restanzahl'), pos(2, 0, 2, 'Anzahl')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Restanzahl und Anzahl'), highlighted(['bestand([], Anzahl).
', 'bestand([Kopf|Rest], Anzahl ):- Restanzahl is Anzahl+1, bestand(Rest, Restanzahl).
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Kopf')]), hint('Kopf: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['bestand([], Anzahl).
', 'bestand( [Kopf|Rest] , Anzahl):-Restanzahl is Anzahl+1, bestand(Rest, Restanzahl).
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'Anzahl')]), hint('Anzahl muss gebunden sein, bevor das Kalkulationssubziel Restanzahl is Anzahl+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['bestand([], Anzahl).
', 'bestand([Kopf|Rest], Anzahl):-Restanzahl is Anzahl+1 , bestand(Rest, Restanzahl).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Anzahl')]), hint('Anzahl: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['bestand([], Anzahl ).
', 'bestand([Kopf|Rest], Anzahl):-Restanzahl is Anzahl+1, bestand(Rest, Restanzahl).
']))], [ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, 'korrekt - wieso ist Anzahl in der Praedikatsdeklaration nicht rot gefaerbt?', korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 14, [declaration(sp, splength, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'splength([],0).\n splength([_|R], Laenge):-splength(R, Laenge1), Laenge is Laenge1 +1.\n', [], [], [], korrekt). test(exer13, 15, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([],0).\n anzahl([_|T], X):- anzahl(T,X1), X is X1+1.\n', [], [], [], korrekt). test(exer13, 16, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(X,Y):- N is 0, Y=[].\n anzahl(X, [_|R]):- anzahl(X1,R), X is X1+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von X erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['anzahl( X , Y):-N is 0, Y=[].
', 'anzahl(X, [_|R]):-anzahl(X1, R), X is X1+1.
'])), error(id(s5b), penalty(0.1), poslist([pos(1, 1)]), hint('N is 0 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['anzahl(X, Y):- N is 0 , Y=[].
', 'anzahl(X, [_|R]):-anzahl(X1, R), X is X1+1.
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 1, 'X')]), hint('X: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['anzahl( X , Y):-N is 0, Y=[].
', 'anzahl(X, [_|R]):-anzahl(X1, R), X is X1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(1, 1, 1, 'N')]), hint('N: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['anzahl(X, Y):- N is 0, Y=[].
', 'anzahl(X, [_|R]):-anzahl(X1, R), X is X1+1.
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 17, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([],0).\n anzahl([_|Rest], A):-anzahl(Rest, A1), A is A1+1.\n', [], [], [], korrekt). test(exer13, 18, [declaration(sp, anz, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')]), declaration(sp, hp_anz, anz/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [basecase, recursivecase, nonrecursive], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anz, 2, anz/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anz, 2, anz/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, hp_anz, 3, anz/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, hp_anz, 3, anz/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, hp_anz, 3, anz/2, accu, 'A2', 2, +, number, accu))], 'hp_anz([], Anzahl, Anzahl).\n hp_anz([H|T], Acc, Anzahl):-Acc1 is Acc+1, hp_anz(T,Acc1, Anzahl).\n anz(Bestand, Anzahl):-hp_anz(Bestand, 0, Anzahl).\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['hp_anz([], Anzahl, Anzahl).
', 'hp_anz( [H|T] , Acc, Anzahl):-Acc1 is Acc+1, hp_anz(T, Acc1, Anzahl).
', 'anz(Bestand, Anzahl):-hp_anz(Bestand, 0, Anzahl).
']))], [ok], [korrekt], ''). test(exer13, 19, [declaration(sp, lang, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, lang, 2, lang/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, lang, 2, lang/2, main, 'A1', 1, -, number, 'Summe'))], 'lang(0,[]).\n lang(N, [_|R]):-lang(N1,R), N is N1+1.\n', [], [], [], korrekt). test(exer13, 20, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([],0).\n anzahl([H|T], E):- anzahl(T,E1), E is E1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl([], 0).
', 'anzahl( [H|T] , E):-anzahl(T, E1), E is E1+1.
']))], [ok], [korrekt], ''). test(exer13, 21, [declaration(sp, autos, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, autos, 2, autos/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, autos, 2, autos/2, main, 'A2', 2, -, number, 'Summe'))], 'autos([],0).\n autos([_|Rest], Anzahl):-autos(Rest, Anzahl1), Anzahl is Anzahl1+1.\n', [], [], [], korrekt). test(exer13, 22, [declaration(sp, bestand, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, -, number, 'Summe'))], 'bestand(0,[]).\n bestand(N, [_,_T]):-N is N1+1, bestand(N1,_T).\n', [error(id(s1f), penalty(0.5), poslist([pos(2, 0, 2, ['_', '_T'])]), hint('[_, _T]: Dieses Argument sollte in folgender Form zerlegt werden: [Auto|Rest]'), highlighted(['bestand(0, []).
', 'bestand(N, [_, _T] ):-N is N1+1, bestand(N1, _T).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['bestand(0, []).
', 'bestand(N, [_, _T]):- N is N1+1 , bestand(N1, _T) .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'N1')]), hint('N1 muss gebunden sein, bevor das Kalkulationssubziel N is N1+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['bestand(0, []).
', 'bestand(N, [_, _T]):-N is N1+1 , bestand(N1, _T).
']))], [ok, ok, ok], [korrekt, korrekt, korrekt], ''). test(exer13, 23, [declaration(sp, anz, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anz, 2, anz/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anz, 2, anz/2, main, 'A2', 2, -, number, 'Summe'))], 'anz([],0).\n anz([_|T], N):-anz(T,N1), N is N1+1.\n', [], [], [], korrekt). test(exer13, 24, [declaration(sp, splength, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, -, number, 'Summe'))], 'splength(0,[]).\n splength(N, [_|Rest]):-splength(N1, Rest), N is N1+1.\n', [], [], [], korrekt). test(exer13, 25, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(0, []).\n anzahl(Anz, [_|Rest]):-anzahl(Anz1, Rest), Anz is Anz1+1.\n', [], [], [], korrekt). test(exer13, 26, [declaration(sp, splength, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, -, number, 'Summe'))], 'splength([],0).\n splength([H|T], L):-splength(T,L1), L is L1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['splength([], 0).
', 'splength( [H|T] , L):-splength(T, L1), L is L1+1.
']))], [ok], [korrekt], ''). test(exer13, 27, [declaration(sp, count, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, count, 2, count/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, count, 2, count/2, main, 'A2', 2, -, number, 'Summe'))], 'count([], 0).\n count([H|T], N):-count(T, N1), N is N1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['count([], 0).
', 'count( [H|T] , N):-count(T, N1), N is N1+1.
']))], [ok], [korrekt], ''). test(exer13, 28, [declaration(sp, anz_kfz, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anz_kfz, 2, anz_kfz/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anz_kfz, 2, anz_kfz/2, main, 'A2', 2, -, number, 'Summe'))], 'anz_kfz([[]], 0).\n anz_kfz([H|T], N):- N is N1+1, anz_kfz(T, N1).\n', [error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [[]] sollte eine leere Liste sein.'), highlighted(['anz_kfz( [[]] , 0).
', 'anz_kfz([H|T], N):-N is N1+1, anz_kfz(T, N1).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['anz_kfz([[]], 0).
', 'anz_kfz([H|T], N):- N is N1+1 , anz_kfz(T, N1) .
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anz_kfz([[]], 0).
', 'anz_kfz( [H|T] , N):-N is N1+1, anz_kfz(T, N1).
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 1, 2, 'N1')]), hint('N1 muss gebunden sein, bevor das Kalkulationssubziel N is N1+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['anz_kfz([[]], 0).
', 'anz_kfz([H|T], N):-N is N1+1 , anz_kfz(T, N1).
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 29, [declaration(sp, wieviele, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A1', 1, -, number, 'Summe'))], 'wieviele(Nat_Zahl, Liste):- Liste=[], Nat_Zahl=0.\n wieviele(Nat_Zahl, Liste):- Liste=[KZ,BJ|Rest], wieviele(Nat_Zahl1, Rest), N is N1+1.\n', [error(id(s1e), penalty(0.5), poslist([pos(2, 1, 2, ['KZ', 'BJ'|'Rest'])]), hint('[KZ, BJ|Rest]: Dieses Argument sollte in folgender Form zerlegt werden: [Auto|Rest]'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste= [KZ, BJ|Rest] , wieviele(Nat_Zahl1, Rest), N is N1+1.
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 1, 'Nat_Zahl')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Nat_Zahl fehlt.'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele( Nat_Zahl , Liste):-Liste=[KZ, BJ|Rest], wieviele(Nat_Zahl1, Rest), N is N1+1.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 3, 2, 'N1'), pos(2, 2, 1, 'Nat_Zahl1')]), hint('N1 sollte mit der Argumentstelle von Nat_Zahl1, oder N1 sollte mit der richtigen Variable im Term Nat_Zahl1 koreferieren.'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste=[KZ, BJ|Rest], wieviele( Nat_Zahl1 , Rest), N is N1+1 .
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 3, 1, 'N'), pos(2, 0, 1, 'Nat_Zahl')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere N und Nat_Zahl'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele( Nat_Zahl , Liste):-Liste=[KZ, BJ|Rest], wieviele(Nat_Zahl1, Rest), N is N1+1.
'])), error(id(post5b), penalty(0.8), poslist([pos(2, 0, 1, 'Nat_Zahl')]), hint('Nat_Zahl: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele( Nat_Zahl , Liste):-Liste=[KZ, BJ|Rest], wieviele(Nat_Zahl1, Rest), N is N1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'KZ')]), hint('KZ: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste= [KZ, BJ|Rest] , wieviele(Nat_Zahl1, Rest), N is N1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'BJ')]), hint('BJ: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste= [KZ, BJ|Rest] , wieviele(Nat_Zahl1, Rest), N is N1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 2, 1, 'Nat_Zahl1')]), hint('Nat_Zahl1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste=[KZ, BJ|Rest], wieviele( Nat_Zahl1 , Rest), N is N1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 3, 1, 'N')]), hint('N: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste=[KZ, BJ|Rest], wieviele(Nat_Zahl1, Rest), N is N1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 3, 2, 'N1')]), hint('N1: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste=[KZ, BJ|Rest], wieviele(Nat_Zahl1, Rest), N is N1+1 .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 3, 2, 'N1')]), hint('N1 muss gebunden sein, bevor das Kalkulationssubziel N is N1+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['wieviele(Nat_Zahl, Liste):-Liste=[], Nat_Zahl=0.
', 'wieviele(Nat_Zahl, Liste):-Liste=[KZ, BJ|Rest], wieviele(Nat_Zahl1, Rest), N is N1+1 .
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 30, [declaration(sp, splength, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, -, number, 'Summe'))], 'splength(0, []).\n splength(N, [_|Rest]):-splength(N1, Rest), N is N1+1.\n', [], [], [], korrekt). test(exer13, 31, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([[]], 0).\n anzahl([[H]|T], N):- anzahl(T, N1), N is N1+1.\n', [error(id(s7g1), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [[]] sollte eine leere Liste sein.'), highlighted(['anzahl( [[]] , 0).
', 'anzahl([[H]|T], N):-anzahl(T, N1), N is N1+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl([[]], 0).
', 'anzahl( [[H]|T] , N):-anzahl(T, N1), N is N1+1.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer13, 32, [declaration(sp, splength, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, -, number, 'Summe'))], 'splength(0,[]).\n splength(N, [_|Rest]):-splength(N1, Rest), N is N1+1.\n', [], [], [], korrekt). test(exer13, 33, [declaration(sp, kfz_anz, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kfz_anz, 2, kfz_anz/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, kfz_anz, 2, kfz_anz/2, main, 'A2', 2, -, number, 'Summe'))], 'kfz_anz([],0).\n kfz_anz([_|R], Anz):-kfz_anz(R, Anzr), Anz is Anzr+1.\n', [], [], [], korrekt). test(exer13, 34, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(0, []).\n anzahl(N, [_|Rest]):-anzahl(N1, Rest), N is N1+1.\n', [], [], [], korrekt). test(exer13, 35, [declaration(sp, laenge, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, laenge, 2, laenge/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, laenge, 2, laenge/2, main, 'A2', 2, -, number, 'Summe'))], 'laenge([], 0).\n laenge([H|T], L):- laenge(T, LT), L is LT+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['laenge([], 0).
', 'laenge( [H|T] , L):-laenge(T, LT), L is LT+1.
']))], [ok], [korrekt], ''). test(exer13, 36, [declaration(sp, wieviele, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A1', 1, -, number, 'Summe'))], 'wieviele(0, []).\n wieviele(N, [K|R]):-wieviele(N1, R), N is N1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['wieviele(0, []).
', 'wieviele(N, [K|R] ):-wieviele(N1, R), N is N1+1.
']))], [ok], [korrekt], ''). test(exer13, 37, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [recursivecase, basecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([H|T], Bestand):- Bestand1 is Bestand+1, bestand(T, Bestand1).\n bestand([], 0).\n', [error(id(s3fa), penalty(0.7), poslist([pos(1, 2), pos(1, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['bestand([H|T], Bestand):- Bestand1 is Bestand+1 , bestand(T, Bestand1) .
', 'bestand([], 0).
'])), error(id(s5a), penalty(0.1), poslist([pos(1, 0, 2, 'Bestand')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Bestand fehlt.'), highlighted(['bestand([H|T], Bestand ):-Bestand1 is Bestand+1, bestand(T, Bestand1).
', 'bestand([], 0).
'])), error(id(s6b1), penalty(0.7), poslist([pos(1, 1, 2, 'Bestand'), pos(1, 2, 2, 'Bestand1')]), hint('Bestand sollte mit der Argumentstelle von Bestand1, oder Bestand sollte mit der richtigen Variable im Term Bestand1 koreferieren.'), highlighted(['bestand([H|T], Bestand):-Bestand1 is Bestand+1 , bestand(T, Bestand1 ).
', 'bestand([], 0).
'])), error(id(s4b1), penalty(0.3), poslist([pos(1, 1, 1, 'Bestand1'), pos(1, 0, 2, 'Bestand')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Bestand1 und Bestand'), highlighted(['bestand([H|T], Bestand ):- Bestand1 is Bestand+1, bestand(T, Bestand1).
', 'bestand([], 0).
'])), error(id(post5a), penalty(0.8), poslist([pos(1, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['bestand( [H|T] , Bestand):-Bestand1 is Bestand+1, bestand(T, Bestand1).
', 'bestand([], 0).
'])), error(id(post7b), penalty(0.8), poslist([pos(1, 1, 2, 'Bestand')]), hint('Bestand muss gebunden sein, bevor das Kalkulationssubziel Bestand1 is Bestand+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['bestand([H|T], Bestand):-Bestand1 is Bestand+1 , bestand(T, Bestand1).
', 'bestand([], 0).
']))], [ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 38, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(N, L):- L=[], N=0.\n anzahl(N,L):- L=[Kopf|Rest], anzahl(N1, Rest), N is N1+1.\n', [error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'Kopf')]), hint('Kopf: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['anzahl(N, L):-L=[], N=0.
', 'anzahl(N, L):-L= [Kopf|Rest] , anzahl(N1, Rest), N is N1+1.
']))], [ok], [korrekt], ''). test(exer13, 39, [declaration(sp, kfz_liste, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kfz_liste, 2, kfz_liste/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, kfz_liste, 2, kfz_liste/2, main, 'A2', 2, -, number, 'Summe'))], 'kfz_liste([], N).\n kfz_liste([Kfz|Restliste_kfz], N):-kfz_liste([Restliste_kfz], N1), N is N1+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von N erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['kfz_liste([], N ).
', 'kfz_liste([Kfz|Restliste_kfz], N):-kfz_liste([Restliste_kfz], N1), N is N1+1.
'])), error(id(s3a), penalty(0.1), poslist([pos(2, 0, 1, ['Kfz'|'Restliste_kfz']), pos(2, 1, 1, ['Restliste_kfz'])]), hint('[Kfz|Restliste_kfz]: sollte rekursiv ab/aufgebaut werden.'), highlighted(['kfz_liste([], N).
', 'kfz_liste( [Kfz|Restliste_kfz] , N):-kfz_liste( [Restliste_kfz] , N1), N is N1+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Kfz')]), hint('Kfz: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['kfz_liste([], N).
', 'kfz_liste( [Kfz|Restliste_kfz] , N):-kfz_liste([Restliste_kfz], N1), N is N1+1.
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'N')]), hint('N: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfz_liste([], N ).
', 'kfz_liste([Kfz|Restliste_kfz], N):-kfz_liste([Restliste_kfz], N1), N is N1+1.
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 41, [declaration(sp, bestand_anz, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand_anz, 2, bestand_anz/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand_anz, 2, bestand_anz/2, main, 'A1', 1, -, number, 'Summe'))], 'bestand_anz(0, []).\n bestand_anz(Anz, [_|Rest]):- bestand_anz(Anz1, Rest), Anz is Anz1+1.\n', [], [], [], korrekt). test(exer13, 42, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [recursivecase, basecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([H|T], N):-anzahl(T, _N), N is _N +1.\n anzahl([], 0).\n', [error(id(post5a), penalty(0.8), poslist([pos(1, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl( [H|T] , N):-anzahl(T, _N), N is _N+1.
', 'anzahl([], 0).
']))], [ok], [korrekt], ''). test(exer13, 43, [declaration(sp, bestand, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, -, number, 'Summe'))], 'bestand(X,L):-L=[], X is 0.\n bestand(X,L):-L=[H|T], bestand(X1, T), X is X1+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von X erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['bestand( X , L):-L=[], X is 0.
', 'bestand(X, L):-L=[H|T], bestand(X1, T), X is X1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'H')]), hint('H: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['bestand(X, L):-L=[], X is 0.
', 'bestand(X, L):-L= [H|T] , bestand(X1, T), X is X1+1.
'])), error(id(s5b), penalty(0.1), poslist([pos(1, 2)]), hint('X is 0 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['bestand(X, L):-L=[], X is 0 .
', 'bestand(X, L):-L=[H|T], bestand(X1, T), X is X1+1.
']))], [nok, ok, ok], ['X ist 0', korrekt, korrekt], ''). test(exer13, 44, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(0, []).\n anzahl(N, [_|Tail]):-anzahl(N1, Tail), N is N1+1.\n', [], [], [], korrekt). test(exer13, 45, [declaration(sp, kfzbestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kfzbestand, 2, kfzbestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, kfzbestand, 2, kfzbestand/2, main, 'A2', 2, -, number, 'Summe'))], 'kfzbestand([], Anzahl).\n kfzbestand([Kopf|Rest], Anzahl):-kfzbestand([Rest], Anzahl1), Anzahl1 is Anzahl+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von Anzahl erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['kfzbestand([], Anzahl ).
', 'kfzbestand([Kopf|Rest], Anzahl):-kfzbestand([Rest], Anzahl1), Anzahl1 is Anzahl+1.
'])), error(id(s3a), penalty(0.1), poslist([pos(2, 0, 1, ['Kopf'|'Rest']), pos(2, 1, 1, ['Rest'])]), hint('[Kopf|Rest]: sollte rekursiv ab/aufgebaut werden.'), highlighted(['kfzbestand([], Anzahl).
', 'kfzbestand( [Kopf|Rest] , Anzahl):-kfzbestand( [Rest] , Anzahl1), Anzahl1 is Anzahl+1.
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Anzahl')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Anzahl fehlt.'), highlighted(['kfzbestand([], Anzahl).
', 'kfzbestand([Kopf|Rest], Anzahl ):-kfzbestand([Rest], Anzahl1), Anzahl1 is Anzahl+1.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 2, 2, 'Anzahl'), pos(2, 1, 2, 'Anzahl1')]), hint('Anzahl sollte mit der Argumentstelle von Anzahl1, oder Anzahl sollte mit der richtigen Variable im Term Anzahl1 koreferieren.'), highlighted(['kfzbestand([], Anzahl).
', 'kfzbestand([Kopf|Rest], Anzahl):-kfzbestand([Rest], Anzahl1 ), Anzahl1 is Anzahl+1 .
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'Anzahl1'), pos(2, 0, 2, 'Anzahl')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Anzahl1 und Anzahl'), highlighted(['kfzbestand([], Anzahl).
', 'kfzbestand([Kopf|Rest], Anzahl ):-kfzbestand([Rest], Anzahl1), Anzahl1 is Anzahl+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Kopf')]), hint('Kopf: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['kfzbestand([], Anzahl).
', 'kfzbestand( [Kopf|Rest] , Anzahl):-kfzbestand([Rest], Anzahl1), Anzahl1 is Anzahl+1.
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 2, 2, 'Anzahl')]), hint('Anzahl muss gebunden sein, bevor das Kalkulationssubziel Anzahl1 is Anzahl+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['kfzbestand([], Anzahl).
', 'kfzbestand([Kopf|Rest], Anzahl):-kfzbestand([Rest], Anzahl1), Anzahl1 is Anzahl+1 .
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Anzahl')]), hint('Anzahl: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfzbestand([], Anzahl ).
', 'kfzbestand([Kopf|Rest], Anzahl):-kfzbestand([Rest], Anzahl1), Anzahl1 is Anzahl+1.
']))], [ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 46, [declaration(sp, wieviele, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A1', 1, -, number, 'Summe'))], 'wieviele(0, []).\n wieviele(Zahl, [_|Rest]):-wieviele(Zahl2, Rest), Zahl is Zahl2 +1.\n', [], [], [], korrekt). test(exer13, 47, [declaration(sp, splength, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, -, number, 'Summe'))], 'splength(0, []).\n splength(N, [_|Rest]):-splength(N1, Rest), N is N1+1.\n', [], [], [], korrekt). test(exer13, 48, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Anzahl der Kraftfahrzeuge')]), declaration(sp, anzahl2, anzahl/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, list, 'Akkumulator'), d('A3', -, number, 'Anzahl der Kraftfahrzeuge')])], _G25405901, [map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akkumulator', accumulator]), predicatedec(sp, anzahl2, 3, anzahl/2, accu, 'A2', 2, +, list, 'Akkumulator')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Anzahl der Kraftfahrzeuge']), predicatedec(sp, anzahl2, 3, anzahl/2, accu, 'A3', 3, -, number, 'Anzahl der Kraftfahrzeuge')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl2, 3, anzahl/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Anzahl der Kraftfahrzeuge']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Anzahl der Kraftfahrzeuge')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste'))], 'anzahl(X,Y):-anzahl2(X,[],Y).\n anzahl2([],[],0).\n anzahl2([],[_|_], Y).\n anzahl2([H|X], Z,Y):-anzahl2(X,[H|Z],Y), Y is Y+1.\n', [error(id(d4), penalty(0.5), poslist([type, 2]), hint('Das Argument A2 des Prädikats anzahl2/3 hat nicht den richtigen Typ. Einer Argumentstelle wird der Typ Liste zugewiesen, wenn Informationen an dieser Stelle eine Liste darstellen. Lesen Sie den Aufgabentext erneut durch und finden Sie einen richtigen Typ für diese Argumentstelle.'))], [nok], ['Der Hinweis ist schwer verstaendlich'], ''). test(exer13, 49, [declaration(sp, kfanzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kfanzahl, 2, kfanzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, kfanzahl, 2, kfanzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'kfanzahl([], 0).\n kfanzahl([K|R], Anzahl):-kfanzahl(R, Anzahlvor), Anzahl is Anzahlvor+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['kfanzahl([], 0).
', 'kfanzahl( [K|R] , Anzahl):-kfanzahl(R, Anzahlvor), Anzahl is Anzahlvor+1.
']))], [ok], [korrekt], ''). test(exer13, 50, [declaration(sp, splength, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, -, number, 'Summe'))], 'splength([], 0).\n splength([_|R], Y):-splength(R, X), Y=X+1.\n', [error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Y')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Y fehlt.'), highlighted(['splength([], 0).
', 'splength([_|R], Y ):-splength(R, X), Y=X+1.
'])), error(id(s4f), penalty(0.1), poslist([pos(2, 2, 1, 'Y'), pos(2, 2, 2, 'X'+1)]), hint('[Y, X+1]: Das Unifikationssubziel dieser Variablen/Terme ist überflüssig.'), highlighted(['splength([], 0).
', 'splength([_|R], Y):-splength(R, X), Y = X+1 .
']))], [ok, ok], [korrekt, korrekt], ''). test(exer13, 51, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')]), declaration(sp, anzahl, anzahl/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 3, anz/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 3, anz/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, anzahl, 3, anz/2, accu, 'A2', 2, +, number, accu))], 'anzahl(X, Erg):-anzahl(X,0, Erg).\n anzahl([], A,A).\n anzahl([H|T], Acc, E):-Acc1 is Acc+1, anzahl(T, Acc1, E).\n', [error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl(X, Erg):-anzahl(X, 0, Erg).
', 'anzahl([], A, A).
', 'anzahl( [H|T] , Acc, E):-Acc1 is Acc+1, anzahl(T, Acc1, E).
']))], [ok], [korrekt], ''). test(exer13, 52, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([], 0).\n bestand([Kopf|Rest], X):-bestand(Rest, X1), X is X1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Kopf')]), hint('Kopf: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['bestand([], 0).
', 'bestand( [Kopf|Rest] , X):-bestand(Rest, X1), X is X1+1.
']))], [ok], [korrekt], ''). test(exer13, 53, [declaration(sp, bestand, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, -, number, 'Summe'))], 'bestand(0, []).\n bestand(X, [_,_|R]):-bestand(X1, R), X is X1+1.\n', [error(id(s1f), penalty(0.5), poslist([pos(2, 0, 2, ['_', '_'|'R'])]), hint('[_, _|R]: Dieses Argument sollte in folgender Form zerlegt werden: [Auto|Rest]'), highlighted(['bestand(0, []).
', 'bestand(X, [_, _|R] ):-bestand(X1, R), X is X1+1.
']))], [ok], [korrekt], ''). test(exer13, 54, [declaration(sp, mylen, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, mylen, 2, mylen2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, mylen, 2, mylen/2, main, 'A2', 2, -, number, 'Summe'))], 'mylen([], 0).\n mylen([Head|Tail], N):-mylen(N1, Tail), N is N1+1.\n', [error(id(s3a), penalty(0.1), poslist([pos(2, 0, 1, ['Head'|'Tail']), pos(2, 1, 1, 'N1')]), hint('[Head|Tail]: sollte rekursiv ab/aufgebaut werden.'), highlighted(['mylen([], 0).
', 'mylen( [Head|Tail] , N):-mylen( N1 , Tail), N is N1+1.
'])), error(id(s3c), penalty(0.5), poslist([pos(2, 1, 1, 'N1'), pos(2, 0, 1, ['Head'|'Tail'])]), hint('N1 sollte mit einer Variable im Term [Head|Tail] koreferieren.'), highlighted(['mylen([], 0).
', 'mylen( [Head|Tail] , N):-mylen( N1 , Tail), N is N1+1.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 2, 2, 'N1'), pos(2, 1, 2, 'Tail')]), hint('N1 sollte mit der Argumentstelle von Tail, oder N1 sollte mit der richtigen Variable im Term Tail koreferieren.'), highlighted(['mylen([], 0).
', 'mylen([Head|Tail], N):-mylen(N1, Tail ), N is N1+1 .
'])), error(id(s1d2), penalty(0.5), poslist([pos(2, 0, 1, 'Tail'), pos(2, 1, 1, 'N1')]), hint(' Eine Unifikation zwischen der Variable im Term Tail und einer Variable des Terms N1 ist erforderlich.'), highlighted(['mylen([], 0).
', 'mylen( [Head|Tail] , N):-mylen( N1 , Tail), N is N1+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Head')]), hint('Head: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['mylen([], 0).
', 'mylen( [Head|Tail] , N):-mylen(N1, Tail), N is N1+1.
']))], [ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt], 'Das eigentliche Problem ist. dass die Argumente in mylen() vertauscht sind - sind dafuer denn vier veschiedene Fehlermeldungen notwendig?'). test(exer13, 55, [declaration(sp, length_kfz, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, length_kfz, 2, length_kfz/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, length_kfz, 2, length_kfz/2, main, 'A2', 2, -, number, 'Summe'))], 'length_kfz([], 0).\n length_kfz([_|R], Laenge2):-length_kfz(R, Laenge1), Laenge2 is Laenge1+1.\n', [], [], [], korrekt). test(exer13, 56, [declaration(sp, anzahlz, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahlz, 2, anzahlz/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahlz, 2, anzahlz/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahlz(N,L):-L=[], N is 0.\n anzahlz(N,L):- L=[Kopf|Rest], anzahlz(N1, Rest), N is N1+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von N erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['anzahlz( N , L):-L=[], N is 0.
', 'anzahlz(N, L):-L=[Kopf|Rest], anzahlz(N1, Rest), N is N1+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'Kopf')]), hint('Kopf: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['anzahlz(N, L):-L=[], N is 0.
', 'anzahlz(N, L):-L= [Kopf|Rest] , anzahlz(N1, Rest), N is N1+1.
'])), error(id(s5b), penalty(0.1), poslist([pos(1, 2)]), hint('N is 0 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['anzahlz(N, L):-L=[], N is 0 .
', 'anzahlz(N, L):-L=[Kopf|Rest], anzahlz(N1, Rest), N is N1+1.
']))], [nok, ok, ok], ['N ist 0', korrekt, korrekt], ''). test(exer13, 57, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(0, []).\n anzahl(Zahl, [H|T]):-anzahl(Z, T), Zahl is Z+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl(0, []).
', 'anzahl(Zahl, [H|T] ):-anzahl(Z, T), Zahl is Z+1.
']))], [ok], [korrekt], ''). test(exer13, 58, [declaration(sp, splength, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, splength, 2, splength/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, splength, 2, splength/2, main, 'A1', 1, -, number, 'Summe'))], 'splength(0, []).\n splength(N, [_|Rest]):-splength(N1, Rest), N is N1+1.\n', [], [], [], korrekt). test(exer13, 59, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(0, []).\n anzahl(N, [_|Rest]):-anzahl(N1, Rest), N is N1+1.\n', [], [], [], korrekt). test(exer13, 60, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([], 0).\n anzahl([_|T], X):-anzahl(T,Y), X is Y+1.\n', [], [], [], korrekt). test(exer13, 61, [declaration(sp, wieviele, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A1', 1, -, number, 'Summe'))], 'wieviele(0, []).\n wieviele(Anzahl, [_|Rest]):-wieviele(Anzahl1, Rest), Anzahl is Anzahl1+1.\n', [], [], [], korrekt). test(exer13, 62, [declaration(sp, anzahl_der_paare, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl_der_paare, 2, anzahl_der_paare/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl_der_paare, 2, anzahl_der_paare/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl_der_paare(0,[]).\n anzahl_der_paare(N, [K|R]):-anzahl_der_paare(N1,R), N is N1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl_der_paare(0, []).
', 'anzahl_der_paare(N, [K|R] ):-anzahl_der_paare(N1, R), N is N1+1.
']))], [ok], [korrekt], ''). test(exer13, 63, [declaration(sp, anzkfz, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [nonrecursive], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzkfz, 2, anzkfz/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzkfz, 2, anzkfz/2, main, 'A1', 1, -, number, 'Summe'))], 'anzkfz(X,Liste):-length(X, Liste).\n', [error(id(g7), penalty(0.5), poslist([pos(1, 1)]), hint('length/2: Dieses Subziel ist unbekannt.'), highlighted(['anzkfz(X, Liste):- length(X, Liste) .
']))], [ok], [korrekt], ''). test(exer13, 64, [declaration(sp, bestand, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, -, number, 'Summe'))], 'bestand(N,L):-L=[], N=0.\n bestand(N,L):-L=[Kopf|Rest], length(N1, Rest), N is N1+1.\n', [error(id(pre3a), penalty(0.3), poslist([pos(1)]), hint('Sie haben diese Klausel als Rekursionsabschluss gewählt. Jedoch fehlt eine dazugehörige Rekursionsklausel, oder diese Klausel ist kein Rekursionsabschluss.'), highlighted([' bestand(N, L) :- L=[] , N=0 .
', 'bestand(N, L):-L=[Kopf|Rest], length(N1, Rest), N is N1+1.
'])), error(id(pre3b), penalty(0.3), poslist([pos(2)]), hint('Sie haben diese Klausel als Rekursionsklausel gewählt, jedoch existiert kein rekursives Subziel in dieser Klausel.'), highlighted(['bestand(N, L):-L=[], N=0.
', ' bestand(N, L) :- L=[Kopf|Rest] , length(N1, Rest) , N is N1+1 .
']))], [ok, ok], [korrekt, korrekt], ''). test(exer13, 65, [declaration(sp, anz, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anz, 2, anz/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anz, 2, anz/2, main, 'A1', 1, -, number, 'Summe'))], 'anz(_,[]).\n anz(N, [H|T]):-anz(N1,T), N1 is N+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von _ erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['anz( _ , []).
', 'anz(N, [H|T]):-anz(N1, T), N1 is N+1.
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 1, 'N')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von N fehlt.'), highlighted(['anz(_, []).
', 'anz( N , [H|T]):-anz(N1, T), N1 is N+1.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 2, 2, 'N'), pos(2, 1, 1, 'N1')]), hint('N sollte mit der Argumentstelle von N1, oder N sollte mit der richtigen Variable im Term N1 koreferieren.'), highlighted(['anz(_, []).
', 'anz(N, [H|T]):-anz( N1 , T), N1 is N+1 .
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'N1'), pos(2, 0, 1, 'N')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere N1 und N'), highlighted(['anz(_, []).
', 'anz( N , [H|T]):-anz(N1, T), N1 is N+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anz(_, []).
', 'anz(N, [H|T] ):-anz(N1, T), N1 is N+1.
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 2, 2, 'N')]), hint('N muss gebunden sein, bevor das Kalkulationssubziel N1 is N+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['anz(_, []).
', 'anz(N, [H|T]):-anz(N1, T), N1 is N+1 .
']))], [ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], 'ein Fehler - viele Kommentare'). test(exer13, 66, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([_|Rest], Summe):- anzahl(Rest, Summe1), Summe is Summe1+1.\n', [error(id(g6), penalty(0.5), poslist([pos(1)]), hint('Wenn Sie die Rekursion verwenden und jeweils ein Element zum rekursiven Subziel übergeben, dann brauchen Sie einen und nur einen Rekursionsabschluss.'), highlighted([' anzahl([_|Rest], Summe) :- anzahl(Rest, Summe1) , Summe is Summe1+1 .
']))], [ok], [korrekt], 'in diesem Fall: ...brauchen Sie noch einen Rekursionsabschluss'). test(exer13, 67, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([], X).\n bestand([H|T], X):-bestand(T,X1), X1 is X+1.\n', [error(id(s7c), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von X erwarten wir eine Zahl. Wir empfehlen: 0'), highlighted(['bestand([], X ).
', 'bestand([H|T], X):-bestand(T, X1), X1 is X+1.
'])), error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'X')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von X fehlt.'), highlighted(['bestand([], X).
', 'bestand([H|T], X ):-bestand(T, X1), X1 is X+1.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 2, 2, 'X'), pos(2, 1, 2, 'X1')]), hint('X sollte mit der Argumentstelle von X1, oder X sollte mit der richtigen Variable im Term X1 koreferieren.'), highlighted(['bestand([], X).
', 'bestand([H|T], X):-bestand(T, X1 ), X1 is X+1 .
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'X1'), pos(2, 0, 2, 'X')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere X1 und X'), highlighted(['bestand([], X).
', 'bestand([H|T], X ):-bestand(T, X1), X1 is X+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['bestand([], X).
', 'bestand( [H|T] , X):-bestand(T, X1), X1 is X+1.
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 2, 2, 'X')]), hint('X muss gebunden sein, bevor das Kalkulationssubziel X1 is X+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['bestand([], X).
', 'bestand([H|T], X):-bestand(T, X1), X1 is X+1 .
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'X')]), hint('X: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['bestand([], X ).
', 'bestand([H|T], X):-bestand(T, X1), X1 is X+1.
']))], [ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 68, [declaration(sp, b, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, b, 2, b/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, b, 2, b/2, main, 'A2', 2, -, number, 'Summe'))], 'b([], 0).\n b([F_|Tail], S):-b(Tail, S1), S is S1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'F_')]), hint('F_: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['b([], 0).
', 'b( [F_|Tail] , S):-b(Tail, S1), S is S1+1.
']))], [ok], [korrekt], ''). test(exer13, 69, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([],0).\n bestand([H|T], Anzahl):-bestand(T, Anzahl1), Anzahl is Anzahl1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['bestand([], 0).
', 'bestand( [H|T] , Anzahl):-bestand(T, Anzahl1), Anzahl is Anzahl1+1.
']))], [ok], [korrekt], ''). test(exer13, 70, [declaration(sp, wieviele, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviele, 2, wieviele/2, main, 'A2', 2, -, number, 'Summe'))], 'wieviele([],0).\n wieviele([K|R], E):-wieviele(R, EL), E is EL+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['wieviele([], 0).
', 'wieviele( [K|R] , E):-wieviele(R, EL), E is EL+1.
']))], [ok], [korrekt], ''). test(exer13, 71, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([],0).\n anzahl([H|T], N):-anzahl(T,N1), N is N1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl([], 0).
', 'anzahl( [H|T] , N):-anzahl(T, N1), N is N1+1.
']))], [ok], [korrekt], ''). test(exer13, 72, [declaration(sp, laenge, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, laenge, 2, laenge/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, laenge, 2, laenge/2, main, 'A2', 2, -, number, 'Summe'))], 'laenge([], 0).\n laenge([K|R], Anz):-laenge(R, Anz), Laenge is LaengeZ+1.\n', [error(id(s5a), penalty(0.1), poslist([pos(2, 0, 2, 'Anz')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Anz fehlt.'), highlighted(['laenge([], 0).
', 'laenge([K|R], Anz ):-laenge(R, Anz), Laenge is LaengeZ+1.
'])), error(id(s6b1), penalty(0.7), poslist([pos(2, 2, 2, 'LaengeZ'), pos(2, 1, 2, 'Anz')]), hint('LaengeZ sollte mit der Argumentstelle von Anz, oder LaengeZ sollte mit der richtigen Variable im Term Anz koreferieren.'), highlighted(['laenge([], 0).
', 'laenge([K|R], Anz):-laenge(R, Anz ), Laenge is LaengeZ+1 .
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'Anz'), pos(2, 1, 2, 'Anz')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['laenge([], 0).
', 'laenge([K|R], Anz ):-laenge(R, Anz ), Laenge is LaengeZ+1.
'])), error(id(s4b1), penalty(0.3), poslist([pos(2, 2, 1, 'Laenge'), pos(2, 0, 2, 'Anz')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Laenge und Anz'), highlighted(['laenge([], 0).
', 'laenge([K|R], Anz ):-laenge(R, Anz), Laenge is LaengeZ+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['laenge([], 0).
', 'laenge( [K|R] , Anz):-laenge(R, Anz), Laenge is LaengeZ+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 2, 1, 'Laenge')]), hint('Laenge: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['laenge([], 0).
', 'laenge([K|R], Anz):-laenge(R, Anz), Laenge is LaengeZ+1.
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 2, 2, 'LaengeZ')]), hint('LaengeZ: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['laenge([], 0).
', 'laenge([K|R], Anz):-laenge(R, Anz), Laenge is LaengeZ+1 .
'])), error(id(post7b), penalty(0.8), poslist([pos(2, 2, 2, 'LaengeZ')]), hint('LaengeZ muss gebunden sein, bevor das Kalkulationssubziel Laenge is LaengeZ+1 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['laenge([], 0).
', 'laenge([K|R], Anz):-laenge(R, Anz), Laenge is LaengeZ+1 .
']))], [ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer13, 73, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([],0).\n anzahl([H|Rest], Bestand):-anzahl(Rest, Restbestand), Bestand is Restbestand+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl([], 0).
', 'anzahl( [H|Rest] , Bestand):-anzahl(Rest, Restbestand), Bestand is Restbestand+1.
']))], [ok], [korrekt], ''). test(exer13, 74, [declaration(sp, count, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, count, 2, count/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, count, 2, count/2, main, 'A2', 2, -, number, 'Summe'))], 'count([], 0).\n count([H|T], N):-count(T, N), N is N+1.\n', [error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'N'), pos(2, 1, 2, 'N')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['count([], 0).
', 'count([H|T], N ):-count(T, N ), N is N+1.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['count([], 0).
', 'count( [H|T] , N):-count(T, N), N is N+1.
']))], [ok, ok], [korrekt, korrekt], ''). test(exer13, 75, [declaration(sp, anzahl, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, -, number, 'Summe'))], 'anzahl([], 0).\n anzahl([X|Y], N):-anzahl(Y,N1), N is N1+1.\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'X')]), hint('X: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl([], 0).
', 'anzahl( [X|Y] , N):-anzahl(Y, N1), N is N1+1.
']))], [ok], [korrekt], ''). test(exer13, 76, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([], 0).\n bestand([_|Y], N):- bestand(Y,N1), N is N1+1.\n', [], [], [], korrekt). test(exer13, 77, [declaration(sp, anzahl1, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')]), declaration(sp, anzahl2, anzahl1/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [basecase, recursivecase, nonrecursive], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl1, 2, anzahl1/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl1, 2, anzahl1/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl2, 3, anzahl1/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl2, 3, anzahl1/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, anzahl2, 3, anzahl1/2, accu, 'A2', 2, +, number, accu))], 'anzahl2([], X,X).\n anzahl2([A|B], C,X):-D is C+1, anzahl2(B,D,X).\n anzahl1(X,Y):-anzahl2(X,0,Y).\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['anzahl2([], X, X).
', 'anzahl2( [A|B] , C, X):-D is C+1, anzahl2(B, D, X).
', 'anzahl1(X, Y):-anzahl2(X, 0, Y).
']))], [ok], [korrekt], ''). test(exer13, 78, [declaration(sp, anzahl, [d('A1', -, number, 'Summe'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, anzahl, 2, anzahl/2, main, 'A1', 1, -, number, 'Summe'))], 'anzahl(0, []).\n anzahl(N, [_|R]):-anzahl(N-1, R).\n', [error(id(s5a), penalty(0.1), poslist([pos(2, 0, 1, 'N')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von N fehlt.'), highlighted(['anzahl(0, []).
', 'anzahl( N , [_|R]):-anzahl(N-1, R).
']))], [ok], [korrekt], ''). test(exer13, 79, [declaration(sp, bestand, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bestand, 2, bestand/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, bestand, 2, bestand/2, main, 'A2', 2, -, number, 'Summe'))], 'bestand([],0).\n bestand([_|Rest], N):-bestand(Rest, N1), N is N1+1.\n', [], [], [], korrekt). test(exer13, 80, [declaration(sp, wieviele1, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')]), declaration(sp, wieviele, wieviele1/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe'), d('A3', +, number, accu)])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviele1, 2, wieviele1/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviele1, 2, wieviele1/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, wieviele, 3, wieviele1/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, wieviele, 3, wieviele1/2, accu, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, wieviele, 3, wieviele1/2, accu, 'A3', 3, +, number, accu))], 'wieviele1(Liste, Ausg):-wieviele(Liste, Ausg, Acc).\n wieviele([], Acc, Acc).\n wieviele([Kopf|Rest], Ausg, Acc):-Acc1 is Acc+1, wieviele(Rest, Ausg, Acc1).\n', [error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'Kopf')]), hint('Kopf: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['wieviele1(Liste, Ausg):-wieviele(Liste, Ausg, Acc).
', 'wieviele([], Acc, Acc).
', 'wieviele( [Kopf|Rest] , Ausg, Acc):-Acc1 is Acc+1, wieviele(Rest, Ausg, Acc1).
'])), error(id(post5c), penalty(0.8), poslist([pos(1, 1, 3, 'Acc')]), hint('Acc: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['wieviele1(Liste, Ausg):-wieviele(Liste, Ausg, Acc ).
', 'wieviele([], Acc, Acc).
', 'wieviele([Kopf|Rest], Ausg, Acc):-Acc1 is Acc+1, wieviele(Rest, Ausg, Acc1).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer13, 81, [declaration(sp, kf, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe')]), declaration(sp, kf_rec, kf/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, recursivecase, basecase], [map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kf, 2, kf/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestand, 2, tpbestand/2, main, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, kf, 2, kf/2, main, 'A2', 2, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kf_rec, 3, kf/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg2', 2, -, number, ['Bestand']), predicatedec(sp, kf_rec, 3, kf/2, accu, 'A3', 3, -, number, 'Summe')), map(dec, predicatedec(tp, tpbestandaccu, 3, tpbestand/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, kf_rec, 3, kf/2, accu, 'A2', 2, +, number, accu))], 'kf(Ls, E):-kf_rec(Ls,0,E).\n kf_rec([H|T], A, E):-A1 is A+1, kf_rec(T,A1,E).\n kf_rec([],E,E).\n', [error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['kf(Ls, E):-kf_rec(Ls, 0, E).
', 'kf_rec( [H|T] , A, E):-A1 is A+1, kf_rec(T, A1, E).
', 'kf_rec([], E, E).
']))], [ok], [korrekt], ''). test(exer14, 1, [declaration(sp, baujahr, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, baujahr, 2, baujahr/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, baujahr, 2, baujahr/2, main, 'A2', 2, -, number, 'Ältesten'))], 'baujahr([],[]).\n baujahr([[H|T]|T2], [X]):-X>T, baujahr([T2], X).\n', [error(id(pre2e), penalty(0.3), poslist([pos(1, 0, 2, [])]), hint('Der Typ von [] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['baujahr([], [] ).
', 'baujahr([[H|T]|T2], [X]):-X>T, baujahr([T2], X).
'])), error(id(pre2e), penalty(0.3), poslist([pos(2, 0, 2, ['X'])]), hint('Der Typ von [X] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['baujahr([], []).
', 'baujahr([[H|T]|T2], [X] ):-X>T, baujahr([T2], X).
']))], [ok, ok], [korrekt, korrekt], ''). test(exer14, 3, [declaration(sp, fahrzeug, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, fahrzeug, 2, fahrzeug/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, fahrzeug, 2, fahrzeug/2, main, 'A2', 2, -, number, 'Ältesten'))], 'fahrzeug([],[]).\n fahrzeug([_,K|R], [H|T]):-K>T, fahrzeug(R,[H|T]).\n fahrzeug([_,K|R], [H|T]):-K[] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['fahrzeug([], [] ).
', 'fahrzeug([_, K|R], [H|T]):-K>T, fahrzeug(R, [H|T]).
', 'fahrzeug([_, K|R], [H|T]):-K'])), error(id(pre2e), penalty(0.3), poslist([pos(2, 0, 2, ['H'|'T'])]), hint('Der Typ von [H|T] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['fahrzeug([], []).
', 'fahrzeug([_, K|R], [H|T] ):-K>T, fahrzeug(R, [H|T]).
', 'fahrzeug([_, K|R], [H|T]):-K'])), error(id(pre2e), penalty(0.3), poslist([pos(3, 0, 2, ['H'|'T'])]), hint('Der Typ von [H|T] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['fahrzeug([], []).
', 'fahrzeug([_, K|R], [H|T]):-K>T, fahrzeug(R, [H|T]).
', 'fahrzeug([_, K|R], [H|T] ):-K']))], [ok, ok, ok], [korrektkorrekt, korrekt, korrekt], ''). test(exer14, 4, [declaration(sp, aeltestes, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A2', 2, -, number, 'Ältesten'))], 'aeltestes([], Aeltestes).\n aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr[] sollte eine Nicht-Leer-Liste sein.'), highlighted(['aeltestes( [] , Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['_'|'Baujahr'])]), hint('[_|Baujahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr', 'aeltestes( [[_|Baujahr]|Restliste] , Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(s8i), penalty(0.1), poslist([pos(3, 1, 2, 'Aeltestes')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term Aeltestes und einer anderen Variable.'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes ).
'])), error(id(s8i), penalty(0.1), poslist([pos(3, 0, 1, ['_'|'Baujahr'])]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term [_|Baujahr] und einer anderen Variable.'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr', 'aeltestes( [[_|Baujahr]|Restliste] , Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'Baujahr')]), hint('Baujahr: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr', 'aeltestes( [[_|Baujahr]|Restliste] , Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['_'|'Baujahr'])]), hint('[_|Baujahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes( [[_|Baujahr]|Restliste] , Aeltestes):-Baujahr', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):- Baujahr , aeltestes(Restliste, Baujahr) .
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(s8j), penalty(0.5), poslist([pos(2, 2, 2, 'Baujahr'), pos(2, 1, 2, 'Aeltestes')]), hint('Aeltestes soll mit einer Variable an der Position von Baujahr unifizieren.'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr< Aeltestes , aeltestes(Restliste, Baujahr ).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'Aeltestes'), pos(2, 1, 2, 'Aeltestes')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes ):-Baujahr< Aeltestes , aeltestes(Restliste, Baujahr).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(post7a), penalty(0.8), poslist([pos(2, 1, 2, 'Aeltestes')]), hint('Aeltestes muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['aeltestes([], Aeltestes).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr< Aeltestes , aeltestes(Restliste, Baujahr).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Aeltestes')]), hint('Aeltestes: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['aeltestes([], Aeltestes ).
', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-Baujahr', 'aeltestes([[_|Baujahr]|Restliste], Aeltestes):-aeltestes(Restliste, Aeltestes).
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 5, [declaration(sp, jahr, [d('A1', +, list, 'Bestandsliste'), d('A2', -, list, 'Baujahr des ältesten Fahrzeugs')])], _G25414383, [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, jahr, 2, jahr/2, main, 'A2', 2, -, list, 'Baujahr des ältesten Fahrzeugs')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, jahr, 2, jahr/2, main, 'A1', 1, +, list, 'Bestandsliste'))], 'jahr([],[]).\n jahr([K,Jahr|Rest], Erg):-jahr(Rest, [Jahr|Erg]).\n', [error(id(d4), penalty(0.5), poslist([type, 2]), hint('Das Argument A2 des Prädikats jahr/2 hat nicht den richtigen Typ. Einer Argumentstelle wird der Typ Liste zugewiesen, wenn Informationen an dieser Stelle eine Liste darstellen. Lesen Sie den Aufgabentext erneut durch und finden Sie einen richtigen Typ für diese Argumentstelle.'))], [ok], ['Der Hinweis ist nicht verstaendlich formuliert. Was bedeutet der zweite Satz?'], ''). test(exer14, 6, [declaration(sp, baujahr, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, baujahr, 2, baujahr/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, baujahr, 2, baujahr/2, main, 'A2', 2, -, number, 'Ältesten'))], 'baujahr([],2000).\n baujahr([[H,Bj,_]|T], Bj):-Bj[]
sollte eine Nicht-Leer-Liste sein.'), highlighted(['baujahr( [] , 2000).
', 'baujahr([[H, Bj, _]|T], Bj):-Bj'])), error(id(s7k), penalty(0.8), poslist([pos(1, 0, 2, 2000)]), hint('An der Stelle von 2000 erwarten wir eine Variable.'), highlighted(['baujahr([], 2000 ).
', 'baujahr([[H, Bj, _]|T], Bj):-Bj'])), error(id(s7h), penalty(0.01), poslist([]), hint('Eine Rekursionsklausel fehlt. Oder haben Sie ein rekursives Subziel vergessen?'), highlighted([' baujahr([], 2000) .
', ' baujahr([[H, Bj, _]|T], Bj) :- Bj , baujahr(T, Bj2) .
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['H', 'Bj', '_'])]), hint('[H, Bj, _]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['baujahr([], 2000).
', 'baujahr( [[H, Bj, _]|T] , Bj):-Bj'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['baujahr([], 2000).
', 'baujahr([[H, Bj, _]|T], Bj):- Bj , baujahr(T, Bj2) .
'])), error(id(s8n), penalty(0.3), poslist([pos(2, 1)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['baujahr([], 2000).
', 'baujahr([[H, Bj, _]|T], Bj):- Bj , baujahr(T, Bj2).
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['baujahr([], 2000).
', 'baujahr( [[H, Bj, _]|T] , Bj):-Bj'])), error(id(post7a), penalty(0.8), poslist([pos(2, 1, 2, 'Bj2')]), hint('Bj2 muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['baujahr([], 2000).
', 'baujahr([[H, Bj, _]|T], Bj):-Bj< Bj2 , baujahr(T, Bj2).
']))], [ok, ok, ok, ok, ok, nok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, 'welcher Operator? er erscheint in der Aufgabenstellung oben aber nicht hier', korrekt, korrekt], ''). test(exer14, 7, [declaration(sp, aeltestes, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A2', 2, -, number, 'Ältesten'))], 'aeltestes([],2000).\n aeltestes([[_|Jahr]|Rest],AltesJahr):-Jahr=A, aeltestes(Rest,A).\n', [error(id(s7e), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [] sollte eine Nicht-Leer-Liste sein.'), highlighted(['aeltestes( [] , 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-Jahr', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s7k), penalty(0.8), poslist([pos(1, 0, 2, 2000)]), hint('An der Stelle von 2000 erwarten wir eine Variable.'), highlighted(['aeltestes([], 2000 ).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-Jahr', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['_'|'Jahr'])]), hint('[_|Jahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-Jahr', 'aeltestes( [[_|Jahr]|Rest] , A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s3fa), penalty(0.7), poslist([pos(3, 2), pos(3, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-Jahr', 'aeltestes([[_|Jahr]|Rest], A):- Jahr>=A , aeltestes(Rest, A) .
'])), error(id(s8n), penalty(0.3), poslist([pos(3, 1)]), hint('Der Operator >= ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: > ist empfohlen.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-Jahr', 'aeltestes([[_|Jahr]|Rest], A):- Jahr>=A , aeltestes(Rest, A).
'])), error(id(post7a), penalty(0.8), poslist([pos(3, 1, 2, 'A')]), hint('A muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-Jahr', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>= A , aeltestes(Rest, A).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['_'|'Jahr'])]), hint('[_|Jahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['aeltestes([], 2000).
', 'aeltestes( [[_|Jahr]|Rest] , AltesJahr):-Jahr', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 3), pos(2, 1)]), hint('Das rekursive Subziel 3 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):- Jahr , AltesJahr is Jahr, aeltestes(Rest, AltesJahr) .
', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s5b), penalty(0.1), poslist([pos(2, 2)]), hint('AltesJahr is Jahr : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-JahrAltesJahr is Jahr
, aeltestes(Rest, AltesJahr).
', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s8j), penalty(0.5), poslist([pos(2, 3, 2, 'AltesJahr'), pos(2, 1, 1, 'Jahr')]), hint('Jahr soll mit einer Variable an der Position von AltesJahr unifizieren.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):- Jahr AltesJahr
).
', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s8j), penalty(0.5), poslist([pos(2, 0, 1, ['_'|'Jahr']), pos(2, 1, 2, 'AltesJahr')]), hint('AltesJahr soll mit einer Variable an der Position von [_|Jahr] unifizieren.'), highlighted(['aeltestes([], 2000).
', 'aeltestes( [[_|Jahr]|Rest] , AltesJahr):-Jahr< AltesJahr , AltesJahr is Jahr, aeltestes(Rest, AltesJahr).
', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'AltesJahr'), pos(2, 3, 2, 'AltesJahr')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr ):-JahrAltesJahr ).
', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
'])), error(id(post7a), penalty(0.8), poslist([pos(2, 1, 2, 'AltesJahr')]), hint('AltesJahr muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['aeltestes([], 2000).
', 'aeltestes([[_|Jahr]|Rest], AltesJahr):-Jahr< AltesJahr , AltesJahr is Jahr, aeltestes(Rest, AltesJahr).
', 'aeltestes([[_|Jahr]|Rest], A):-Jahr>=A, aeltestes(Rest, A).
']))], [ok, ok, ok, ok, ok, ok, ok, ok, nok, nok, ok, nok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, 'korrekt - die Anzeige des Fehlers ist jedoch falsch', 'korrekt - auch hier: fehlerhafte Anzeige', korrekt, 'Fehlerhafte Darstellung', korrekt], ''). test(exer14, 8, [declaration(sp, das_aelteste, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, hpdas_aelteste, das_aelteste/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, das_aelteste, 2, das_aelteste/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, das_aelteste, 2, das_aelteste/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, hpdas_aelteste, 3, das_aelteste/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, hpdas_aelteste, 3, das_aelteste/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, hpdas_aelteste, 3, das_aelteste/2, accu, 'A2', 2, +, number, accu))], 'das_aelteste(Bestand,Ausgabe):-hpdas_aelteste(Bestand,9999,Ausgabe).\n hpdas_aelteste([[_|BJ]|Rest],AEBJ,Ausg):-AEBS>BS, hpdas_aelteste(Rest, BJ, Ausg).\n hpdas_aelteste([[_,BJ]|Rest], AEBJ, Ausg):-AEBJ=', ' hpdas_aelteste([[_|BJ]|Rest], AEBJ, Ausg) :- AEBS>BS , hpdas_aelteste(Rest, BJ, Ausg) .
', 'hpdas_aelteste([[_, BJ]|Rest], AEBJ, Ausg):-AEBJ=']))], [nok], ['wie ist das genau gemeint?'], ''). test(exer14, 9, [declaration(sp, das_aelteste, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, amaeltesten, das_aelteste/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, das_aelteste, 2, das_aelteste/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, das_aelteste, 2, das_aelteste/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, amaeltesten, 3, das_aelteste/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, amaeltesten, 3, das_aelteste/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, amaeltesten, 3, das_aelteste/2, accu, 'A2', 2, +, number, accu))], 'das_aelteste(Bestand,Ausgabe):-amaeltesten(Bestand,9999,Ausgabe).\n amaeltesten([],Acc,Acc).\n amaeltesten([[K,BS]|T],Acc,E):-BJ=Acc, amaeltesten(T,Acc,E).\n', [error(id(s8i), penalty(0.1), poslist([pos(4, 0, 1, ['K', 'BS'])]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term [K, BS] und einer anderen Variable.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ=', 'amaeltesten( [[K, BS]|T] , Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(s8j), penalty(0.5), poslist([pos(4, 0, 1, ['K', 'BS']), pos(4, 1, 1, 'BJ')]), hint('BJ soll mit einer Variable an der Position von [K, BS] unifizieren.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ=', 'amaeltesten( [[K, BS]|T] , Acc, E):- BJ >Acc, amaeltesten(T, Acc, E).
'])), error(id(s1d2), penalty(0.5), poslist([pos(4, 0, 1, ['BS']), pos(4, 1, 1, 'BJ')]), hint(' Eine Unifikation zwischen der Variable im Term [BS] und einer Variable des Terms BJ ist erforderlich.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ=', 'amaeltesten( [[K, BS]|T] , Acc, E):- BJ >Acc, amaeltesten(T, Acc, E).
'])), error(id(post5a), penalty(0.8), poslist([pos(4, 0, 1, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ=', 'amaeltesten( [[K, BS]|T] , Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(post5a), penalty(0.8), poslist([pos(4, 0, 1, 'BS')]), hint('BS: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ=', 'amaeltesten( [[K, BS]|T] , Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(post5c), penalty(0.8), poslist([pos(4, 1, 1, 'BJ')]), hint('BJ: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ=', 'amaeltesten([[K, BS]|T], Acc, E):- BJ >Acc, amaeltesten(T, Acc, E).
'])), error(id(post7a), penalty(0.8), poslist([pos(4, 1, 1, 'BJ')]), hint('BJ muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ=', 'amaeltesten([[K, BS]|T], Acc, E):- BJ >Acc, amaeltesten(T, Acc, E).
'])), error(id(s8i), penalty(0.1), poslist([pos(3, 0, 1, ['K', 'BS'])]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term [K, BS] und einer anderen Variable.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten( [[K, BS]|T] , Acc, E):-BJ=', 'amaeltesten([[K, BS]|T], Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(s1d2), penalty(0.5), poslist([pos(3, 0, 1, ['BS']), pos(3, 1, 1, 'BJ')]), hint(' Eine Unifikation zwischen der Variable im Term [BS] und einer Variable des Terms BJ ist erforderlich.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten( [[K, BS]|T] , Acc, E):- BJ =', 'amaeltesten([[K, BS]|T], Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(s1d2), penalty(0.5), poslist([pos(3, 0, 1, ['BS']), pos(3, 2, 2, 'BJ')]), hint(' Eine Unifikation zwischen der Variable im Term [BS] und einer Variable des Terms BJ ist erforderlich.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten( [[K, BS]|T] , Acc, E):-BJ=BJ , E).
', 'amaeltesten([[K, BS]|T], Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'K')]), hint('K: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten( [[K, BS]|T] , Acc, E):-BJ=', 'amaeltesten([[K, BS]|T], Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'BS')]), hint('BS: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten( [[K, BS]|T] , Acc, E):-BJ=', 'amaeltesten([[K, BS]|T], Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
'])), error(id(post7a), penalty(0.8), poslist([pos(3, 1, 1, 'BJ')]), hint('BJ muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['das_aelteste(Bestand, Ausgabe):-amaeltesten(Bestand, 9999, Ausgabe).
', 'amaeltesten([], Acc, Acc).
', 'amaeltesten([[K, BS]|T], Acc, E):- BJ =', 'amaeltesten([[K, BS]|T], Acc, E):-BJ>Acc, amaeltesten(T, Acc, E).
']))], [ok, ok, nok, ok, ok, ok, ok, ok, nok, nok, ok, ok, ok], [korrekt, korrekt, 'es gibt keinen Term [BS]', korrekt, korrekt, korrekt, korrekt, korrekt, 'korrekt - jedoch fehlerhafte Anzeige und es gibt keinen Term [BS]', 'siehe oben', korrekt, korrekt, korrekt], 'Fehlerhafte Anzeigen!'). test(exer14, 10, [declaration(sp, aeltestes, [d('A1', +, list, 'Bestandsliste'), d('A2', -, list, 'Baujahr des ältesten Fahrzeugs')])], _G25417077, [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A2', 2, -, list, 'Baujahr des ältesten Fahrzeugs')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A1', 1, +, list, 'Bestandsliste'))], 'aeltestes(Bj, []).\n aeltestes(Bj1, [[_,Bj]|T]):- Bj1=Bj, aeltestes(Bj1, T).\n', [error(id(d4), penalty(0.5), poslist([type, 2]), hint('Das Argument A2 des Prädikats aeltestes/2 hat nicht den richtigen Typ. Einer Argumentstelle wird der Typ Liste zugewiesen, wenn Informationen an dieser Stelle eine Liste darstellen. Lesen Sie den Aufgabentext erneut durch und finden Sie einen richtigen Typ für diese Argumentstelle.'))], [nok], ['korrekt, allerdings zweideutige Formulierung des 2. Satzes!'], ''). test(exer14, 11, [declaration(sp, oldes_h, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, oldes_h, oldes_h/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, list, accu), d('A3', -, list, 'Baujahr')])], _G25417419, [map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akkumulator', accumulator]), predicatedec(sp, oldes_h, 3, oldes_h/2, accu, 'A2', 2, +, list, accu)), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, oldes_h, 3, oldes_h/2, accu, 'A3', 3, -, list, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, oldes_h, 3, oldes_h/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, oldes_h, 2, oldes_h/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, oldes_h, 2, oldes_h/2, main, 'A1', 1, +, list, 'Bestandsliste'))], 'oldes_h([], [Kkz, Jahr], [Fkz, Jahr]).\n oldes_h([[Fkz,Jahr]|Rest], [OFkz, OJahr], Erg):-Jahr >OJahr, oldes_h(Rest, [OFkz, OJahr], Erg).\n oldes_h([[Fkz,Jahr]|Rest], [OFkz, OJahr], Erg):-Jahr=A2 des Prädikats oldes_h/3 hat nicht den richtigen Typ. Einer Argumentstelle wird der Typ Liste zugewiesen, wenn Informationen an dieser Stelle eine Liste darstellen. Lesen Sie den Aufgabentext erneut durch und finden Sie einen richtigen Typ für diese Argumentstelle.')), error(id(d4), penalty(0.5), poslist([type, 3]), hint('Das Argument A3 des Prädikats oldes_h/3 hat nicht den richtigen Typ. Einer Argumentstelle wird der Typ Liste zugewiesen, wenn Informationen an dieser Stelle eine Liste darstellen. Lesen Sie den Aufgabentext erneut durch und finden Sie einen richtigen Typ für diese Argumentstelle.'))], [ok, ok], ['', ''], 'korrekt - aber die Formulierung aender! (2.Satz) '). test(exer14, 12, [declaration(sp, aeltestes, [d('A1', -, number, 'Ältesten'), d('A2', +, list, 'Bestandsliste')])], [recursivecase, recursivecase, basecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A1', 1, -, number, 'Ältesten'))], 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2=Bauj, aeltestes(Bauj, Rest).\n aeltestes(Bauj, []).\n', [error(id(s7e), penalty(0.8), poslist([pos(3, 0, 2)]), hint('An der Stelle von [] sollte eine Nicht-Leer-Liste sein.'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, [] ).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):- Bauj2>=Bauj , aeltestes(Bauj, Rest) .
', 'aeltestes(Bauj, []).
'])), error(id(s8n), penalty(0.3), poslist([pos(2, 1)]), hint('Der Operator >= ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: > ist empfohlen.'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):- Bauj2>=Bauj , aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 2, 'Nr')]), hint('Nr: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest] ):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(post7a), penalty(0.8), poslist([pos(2, 1, 2, 'Bauj')]), hint('Bauj muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>= Bauj , aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(s3fa), penalty(0.7), poslist([pos(1, 2), pos(1, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):- Bauj2 , aeltestes(Bauj2, Rest) .
', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(s8j), penalty(0.5), poslist([pos(1, 2, 1, 'Bauj2'), pos(1, 1, 2, 'Bauj')]), hint('Bauj soll mit einer Variable an der Position von Bauj2 unifizieren.'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2< Bauj , aeltestes( Bauj2 , Rest).
', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(s4a1), penalty(0.5), poslist([pos(1, 0, 1, 'Bauj'), pos(1, 1, 2, 'Bauj')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['aeltestes( Bauj , [[Nr, Bauj2]|Rest]):-Bauj2< Bauj , aeltestes(Bauj2, Rest).
', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(post5a), penalty(0.8), poslist([pos(1, 0, 2, 'Nr')]), hint('Nr: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest] ):-Bauj2', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(post7a), penalty(0.8), poslist([pos(1, 1, 2, 'Bauj')]), hint('Bauj muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2< Bauj , aeltestes(Bauj2, Rest).
', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes(Bauj, []).
'])), error(id(post5b), penalty(0.8), poslist([pos(3, 0, 1, 'Bauj')]), hint('Bauj: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2', 'aeltestes(Bauj, [[Nr, Bauj2]|Rest]):-Bauj2>=Bauj, aeltestes(Bauj, Rest).
', 'aeltestes( Bauj , []).
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 13, [declaration(sp, oldest, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten'), d('A3', -, list, 'List des ältesten Fahrzeugs')])], _G25418233, [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, oldest, 3, oldest/3, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, oldest, 3, oldest/3, main, 'A1', 1, +, list, 'Bestandsliste'))], 'oldest(Liste, J, Erg):- length(Erg, 1), older(List, J, Erg).\n oldest(List, J, Erg):- J1 is J+1, oldest(List, J1, Erg).\n', [error(id(d2b), penalty(0.1), poslist([pred, oldest]), hint('Die Deklaration für das Prädikat oldest/3 hat mehr Argumentstellen als erforderlich.'))], [ok], [korrekt], ''). test(exer14, 14, [declaration(sp, aeltestes, [d('A1', +, list, 'Bestandsliste'), d('A2', -, list, 'Ältesten')])], _G25418384, [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A2', 2, -, list, 'Ältesten')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A1', 1, +, list, 'Bestandsliste'))], 'aeltestes([], []).\n aeltestes([KZ, BJ, KZ1, BJ1|Rest], [KZ, BJ, RestX]):- NJBJ1,aeltestes([KZ, BJ|Rest], [KZ,BJ|RestX]).\n', [error(id(d4), penalty(0.5), poslist([type, 2]), hint('Das Argument A2 des Prädikats aeltestes/2 hat nicht den richtigen Typ. Einer Argumentstelle wird der Typ Liste zugewiesen, wenn Informationen an dieser Stelle eine Liste darstellen. Lesen Sie den Aufgabentext erneut durch und finden Sie einen richtigen Typ für diese Argumentstelle.'))], [ok], [korrekt], 'Formulierung aendern!'). test(exer14, 15, [declaration(sp, maxalt_f, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, maxalt_f, 2, maxalt_f/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, maxalt_f, 2, maxalt_f/2, main, 'A1', 1, -, number, 'Ältesten'))], 'maxalt_f([[X|_]], X).\n maxalt_f([[Kfz|Alter], [_|Alter2]|Rest], Erg):-Alter>Alter2,maxalt_f([[Kfz|Alter]|Rest], Erg).\n \r\nmaxalt_f([_|Alter], [[Kfz|AlterZ]|Rest], Erg):- Alter=3. Klausel
stimmt nicht mit der Deklaration überein. Der Klauselkopf hat zu wenige oder zu viele Argumente oder maxalt_f/3 ist noch nicht deklariert!'), highlighted(['maxalt_f([[X|_]], X).
', 'maxalt_f([[Kfz|Alter], [_|Alter2]|Rest], Erg):-Alter>Alter2, maxalt_f([[Kfz|Alter]|Rest], Erg).
', ' maxalt_f([_|Alter], [[Kfz|AlterZ]|Rest], Erg) :- Alter= , maxalt_f([[Kfz|Alter2]|Rest], Erg) .
'])), error(id(pre2e), penalty(0.3), poslist([pos(1, 0, 1, [['X'|'_']])]), hint('Der Typ von [[X|_]] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['maxalt_f( [[X|_]] , X).
', 'maxalt_f([[Kfz|Alter], [_|Alter2]|Rest], Erg):-Alter>Alter2, maxalt_f([[Kfz|Alter]|Rest], Erg).
', 'maxalt_f([_|Alter], [[Kfz|AlterZ]|Rest], Erg):-Alter='])), error(id(pre2e), penalty(0.3), poslist([pos(2, 0, 1, [['Kfz'|'Alter'], ['_'|'Alter2']|'Rest'])]), hint('Der Typ von [[Kfz|Alter], [_|Alter2]|Rest] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['maxalt_f([[X|_]], X).
', 'maxalt_f( [[Kfz|Alter], [_|Alter2]|Rest] , Erg):-Alter>Alter2, maxalt_f([[Kfz|Alter]|Rest], Erg).
', 'maxalt_f([_|Alter], [[Kfz|AlterZ]|Rest], Erg):-Alter='])), error(id(pre3b), penalty(0.3), poslist([pos(3)]), hint('Sie haben diese Klausel als Rekursionsklausel gewählt, jedoch existiert kein rekursives Subziel in dieser Klausel.'), highlighted(['maxalt_f([[X|_]], X).
', 'maxalt_f([[Kfz|Alter], [_|Alter2]|Rest], Erg):-Alter>Alter2, maxalt_f([[Kfz|Alter]|Rest], Erg).
', ' maxalt_f([_|Alter], [[Kfz|AlterZ]|Rest], Erg) :- Alter= , maxalt_f([[Kfz|Alter2]|Rest], Erg) .
']))], [ok, ok, ok, ok], ['korrekt - zu viele!', korrekt, korrekt, korrekt], 'Fehlerhafte Darstellung der Studentenloesungen'). test(exer14, 16, [declaration(sp, kfz_sw, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kfz_sw, 2, maxalt_f/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, kfz_sw, 2, maxalt_f/2, main, 'A2', 2, -, number, 'Ältesten'))], 'kfz_sw([],Bj).\n kfz_sw([[_|Jahr]|R],Bj):- kfz_sw(R,Bj), Bj[]
sollte eine Nicht-Leer-Liste sein.'), highlighted(['kfz_sw( [] , Bj).
', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj is Jahr.
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['_'|'Jahr'])]), hint('[_|Jahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['kfz_sw([], Bj).
', 'kfz_sw( [[_|Jahr]|R] , Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj is Jahr.
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['_'|'Jahr'])]), hint('[_|Jahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['kfz_sw([], Bj).
', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw( [[_|Jahr]|R] , Bj):-kfz_sw(R, Bj), Bj is Jahr.
'])), error(id(s5b), penalty(0.1), poslist([pos(3, 2)]), hint('Bj is Jahr : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['kfz_sw([], Bj).
', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj is Jahr .
'])), error(id(s8i), penalty(0.1), poslist([pos(3, 1, 2, 'Bj')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term Bj und einer anderen Variable.'), highlighted(['kfz_sw([], Bj).
', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj ), Bj is Jahr.
'])), error(id(s8i), penalty(0.1), poslist([pos(3, 0, 1, ['_'|'Jahr'])]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term [_|Jahr] und einer anderen Variable.'), highlighted(['kfz_sw([], Bj).
', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw( [[_|Jahr]|R] , Bj):-kfz_sw(R, Bj), Bj is Jahr.
'])), error(id(s4a1), penalty(0.5), poslist([pos(3, 0, 2, 'Bj'), pos(3, 1, 2, 'Bj')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['kfz_sw([], Bj).
', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw([[_|Jahr]|R], Bj ):-kfz_sw(R, Bj ), Bj is Jahr.
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Bj')]), hint('Bj: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfz_sw([], Bj ).
', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj', 'kfz_sw([[_|Jahr]|R], Bj):-kfz_sw(R, Bj), Bj is Jahr.
']))], [ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 17, [declaration(sp, oldie, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, firstout, oldie/2, helper, [d('A1', +, list, 'Bestandsliste'), d('A2', -, list, 'Älteren')]), declaration(sp, max, oldie/2, helper, [d('A1', +, list, 'Liste'), d('A2', -, number, 'Maximum')])], [nonrecursive, basecase, basecase, recursivecase, basecase, basecase, basecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, oldie, 2, oldie/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, oldie, 2, oldie/2, main, 'A2', 2, -, number, 'Ältesten'))], 'oldie(Liste, BJ):-flatten(Liste, FlattList),firstout(Flattlist, BjListe),max(BjListe, BJ).\n firstout([],[]).\n firstout([A],[]).\n firstout([A,B|T],[B|N]):-firstout(T,N).\n max([A],A).\n max([A,B],A):-A>B.\n max([B,A],B):-B>A.\n max([A|T],A):-max(T,A).\n', [error(id(g7), penalty(0.5), poslist([pos(1, 1)]), hint('flatten/2: Dieses Subziel ist unbekannt.'), highlighted(['oldie(Liste, BJ):- flatten(Liste, FlattList) , firstout(Flattlist, BjListe), max(BjListe, BJ).
', 'firstout([], []).
', 'firstout([A], []).
', 'firstout([A, B|T], [B|N]):-firstout(T, N).
', 'max([A], A).
', 'max([A, B], A):-A>B.
', 'max([B, A], B):-B>A.
', 'max([A|T], A):-max(T, A).
']))], [ok], [korrekt], ''). test(exer14, 18, [declaration(sp, aeltestes_baujahr, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes_baujahr, 2, aeltestes_baujahr/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes_baujahr, 2, aeltestes_baujahr/2, main, 'A2', 2, -, number, 'Ältesten'))], 'aeltestes_baujahr([[A,J]], J).\n aeltestes_baujahr([[A,J1]|R], J):-aeltestes_baujahr(R, J2), <(J1,J2), J=J1.\n aeltestes_baujahr([[A,J1]|R], J):-aeltestes_baujahr(R, J2), >=(J1,J2), J=J2.\n', [error(id(s8n), penalty(0.3), poslist([pos(3, 2)]), hint('Der Operator >= ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: > ist empfohlen.'), highlighted(['aeltestes_baujahr([[A, J]], J).
', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1>=J2 , J=J2.
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes_baujahr([[A, J]], J).
', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1', 'aeltestes_baujahr( [[A, J1]|R] , J):-aeltestes_baujahr(R, J2), J1>=J2, J=J2.
'])), error(id(s8n), penalty(0.3), poslist([pos(2, 2)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['aeltestes_baujahr([[A, J]], J).
', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1 , J=J1.
', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1>=J2, J=J2.
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes_baujahr([[A, J]], J).
', 'aeltestes_baujahr( [[A, J1]|R] , J):-aeltestes_baujahr(R, J2), J1', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1>=J2, J=J2.
'])), error(id(post5a), penalty(0.8), poslist([pos(1, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes_baujahr( [[A, J]] , J).
', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1', 'aeltestes_baujahr([[A, J1]|R], J):-aeltestes_baujahr(R, J2), J1>=J2, J=J2.
']))], [ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 20, [declaration(sp, oldest, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, oldest, 2, oldest/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, oldest, 2, oldest/2, main, 'A2', 2, -, number, 'Ältesten'))], 'oldest([[_|CarYear]|T], X):-T=[], X=CarYear.\n oldest([[_|CarYear]|T], X):-oldest(T, _X), CarYear<_X, X=CarYear.\n \r\noldest([[_,CArYear]|T], X):- oldest(T,_X), CArYear>=_X, X=_X.\n', [error(id(s8n), penalty(0.3), poslist([pos(3, 2)]), hint('Der Operator >= ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: > ist empfohlen.'), highlighted(['oldest([[_|CarYear]|T], X):-T=[], X=CarYear.
', 'oldest([[_|CarYear]|T], X):-oldest(T, _X), CarYear<_X, X=CarYear.
', 'oldest([[_, CArYear]|T], X):-oldest(T, _X), CArYear>=_X , X=_X.
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['_'|'CarYear'])]), hint('[_|CarYear]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['oldest([[_|CarYear]|T], X):-T=[], X=CarYear.
', 'oldest( [[_|CarYear]|T] , X):-oldest(T, _X), CarYear<_X, X=CarYear.
', 'oldest([[_, CArYear]|T], X):-oldest(T, _X), CArYear>=_X, X=_X.
'])), error(id(s8n), penalty(0.3), poslist([pos(2, 2)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['oldest([[_|CarYear]|T], X):-T=[], X=CarYear.
', 'oldest([[_|CarYear]|T], X):-oldest(T, _X), CarYear<_X , X=CarYear.
', 'oldest([[_, CArYear]|T], X):-oldest(T, _X), CArYear>=_X, X=_X.
'])), error(id(s1f), penalty(0.5), poslist([pos(1, 0, 1, [['_'|'CarYear']|'T'])]), hint('[[_|CarYear]|T]: Dieses Argument sollte in folgender Form zerlegt werden: [[_, Jahr]]'), highlighted(['oldest( [[_|CarYear]|T] , X):-T=[], X=CarYear.
', 'oldest([[_|CarYear]|T], X):-oldest(T, _X), CarYear<_X, X=CarYear.
', 'oldest([[_, CArYear]|T], X):-oldest(T, _X), CArYear>=_X, X=_X.
'])), error(id(s4g), penalty(0.1), poslist([pos(1, 1, 1, 'T'), pos(1, 1, 2, [])]), hint('[T, []]: Das Unifikationssubziel dieser Variablen/Terme ist überflüssig.'), highlighted(['oldest([[_|CarYear]|T], X):- T = [] , X=CarYear.
', 'oldest([[_|CarYear]|T], X):-oldest(T, _X), CarYear<_X, X=CarYear.
', 'oldest([[_, CArYear]|T], X):-oldest(T, _X), CArYear>=_X, X=_X.
']))], [ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 23, [declaration(sp, baujahr, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, bau, baujahr/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, baujahr, 2, baujahr/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, baujahr, 2, baujahr/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bau, 3, baujahr/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, bau, 3, baujahr/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, bau, 3, baujahr/2, accu, 'A2', 2, +, number, accu))], 'baujahr(Liste,Baujahr):-bau(Liste,2000,Baujahr).\n bau([],Acc,Acc).\n bau([[_,Jahr]|Tail],Acc,Baujahr):-Jahr=[_|Tail]
sollte eine eingebette (De-)Komposition (z.B. [[X|H]|T]) stattfinden.'), highlighted(['baujahr(Liste, Baujahr):-bau(Liste, 2000, Baujahr).
', 'bau([], Acc, Acc).
', 'bau([[_, Jahr]|Tail], Acc, Baujahr):-Jahr=', 'bau( [_|Tail] , Acc, Baujahr):-bau(Tail, Acc, Baujahr).
'])), error(id(s8i), penalty(0.1), poslist([pos(4, 0, 2, 'Acc')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term Acc und einer anderen Variable.'), highlighted(['baujahr(Liste, Baujahr):-bau(Liste, 2000, Baujahr).
', 'bau([], Acc, Acc).
', 'bau([[_, Jahr]|Tail], Acc, Baujahr):-Jahr=', 'bau([_|Tail], Acc , Baujahr):-bau(Tail, Acc, Baujahr).
']))], [ok, nok], [korrekt, 'korrekt - aber wieso heisst es: eine Variable im Term?'], ''). test(exer14, 24, [declaration(sp, kfz_alt, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, kfz_alt, 2, kfz_alt/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, kfz_alt, 2, kfz_alt/2, main, 'A2', 2, -, number, 'Ältesten'))], 'kfz_alt([_|[]], Fahrzeug).\n kfz_alt([[Kopf|Rest1]|[Kopf1|Rest2]], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2]|[Kopf3|Rest3]], Fahrzeug).\n kfz_alt([[Kopf|Rest1]|[Kopf1|Rest2]], Fahrzeug):-Rest1[Kopf|Rest1]
: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, [['Kopf'|'Rest1'], 'Kopf1'|'Rest2'])]), hint('[[Kopf|Rest1], Kopf1|Rest2]: Dieses Argument sollte in folgender Form zerlegt werden: [Head|Rest]'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1'])), error(id(s3a), penalty(0.1), poslist([pos(3, 0, 1, [['Kopf'|'Rest1'], 'Kopf1'|'Rest2']), pos(3, 3, 1, [['Kopf1'|'Rest2'], 'Kopf3'|'Rest3'])]), hint('[[Kopf|Rest1], Kopf1|Rest2]: sollte rekursiv ab/aufgebaut werden.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1[[Kopf1|Rest2], Kopf3|Rest3] , Fahrzeug).
'])), error(id(s3fa), penalty(0.7), poslist([pos(3, 3), pos(3, 1)]), hint('Das rekursive Subziel 3 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):- Rest1 , Fahrzeug is Rest2, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug) .
'])), error(id(s5b), penalty(0.1), poslist([pos(3, 2)]), hint('Fahrzeug is Rest2 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1Fahrzeug is Rest2
, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
'])), error(id(s8i), penalty(0.1), poslist([pos(3, 3, 2, 'Fahrzeug')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term Fahrzeug und einer anderen Variable.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1Fahrzeug ).
'])), error(id(s8j), penalty(0.5), poslist([pos(3, 3, 2, 'Fahrzeug'), pos(3, 1, 2, 'Rest2')]), hint('Rest2 soll mit einer Variable an der Position von Fahrzeug unifizieren.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1< Rest2 , Fahrzeug is Rest2, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug ).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'Kopf')]), hint('Kopf: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1'])), error(id(post5c), penalty(0.8), poslist([pos(3, 3, 1, 'Kopf3')]), hint('Kopf3: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1[[Kopf1|Rest2], Kopf3|Rest3] , Fahrzeug).
'])), error(id(post5c), penalty(0.8), poslist([pos(3, 3, 1, 'Rest3')]), hint('Rest3: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1[[Kopf1|Rest2], Kopf3|Rest3] , Fahrzeug).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['Kopf'|'Rest1'])]), hint('[Kopf|Rest1]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, [['Kopf'|'Rest1'], 'Kopf1'|'Rest2'])]), hint('[[Kopf|Rest1], Kopf1|Rest2]: Dieses Argument sollte in folgender Form zerlegt werden: [Head|Rest]'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s3a), penalty(0.1), poslist([pos(2, 0, 1, [['Kopf'|'Rest1'], 'Kopf1'|'Rest2']), pos(2, 3, 1, [['Kopf1'|'Rest2'], 'Kopf3'|'Rest3'])]), hint('[[Kopf|Rest1], Kopf1|Rest2]: sollte rekursiv ab/aufgebaut werden.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt( [[Kopf1|Rest2], Kopf3|Rest3] , Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 3), pos(2, 1)]), hint('Das rekursive Subziel 3 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):- Rest1>Rest2 , Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug) .
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s5b), penalty(0.1), poslist([pos(2, 2)]), hint('Fahrzeug is Rest1 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1 , kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s8i), penalty(0.1), poslist([pos(2, 3, 2, 'Fahrzeug')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term Fahrzeug und einer anderen Variable.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug ).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s8j), penalty(0.5), poslist([pos(2, 3, 2, 'Fahrzeug'), pos(2, 1, 2, 'Rest2')]), hint('Rest2 soll mit einer Variable an der Position von Fahrzeug unifizieren.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1> Rest2 , Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug ).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'Fahrzeug'), pos(2, 3, 2, 'Fahrzeug')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug ):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug ).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'Kopf')]), hint('Kopf: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt( [[Kopf|Rest1], Kopf1|Rest2] , Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(post5c), penalty(0.8), poslist([pos(2, 3, 1, 'Kopf3')]), hint('Kopf3: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt( [[Kopf1|Rest2], Kopf3|Rest3] , Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(post5c), penalty(0.8), poslist([pos(2, 3, 1, 'Rest3')]), hint('Rest3: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfz_alt([_], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt( [[Kopf1|Rest2], Kopf3|Rest3] , Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(s1f), penalty(0.5), poslist([pos(1, 0, 1, ['_'])]), hint('[_]: Dieses Argument sollte in folgender Form zerlegt werden: [[_, Jahr]]'), highlighted(['kfz_alt( [_] , Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Fahrzeug')]), hint('Fahrzeug: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['kfz_alt([_], Fahrzeug ).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1>Rest2, Fahrzeug is Rest1, kfz_alt([[Kopf1|Rest2], Kopf3|Rest3], Fahrzeug).
', 'kfz_alt([[Kopf|Rest1], Kopf1|Rest2], Fahrzeug):-Rest1']))], [ok, ok, ok, ok, nok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, 'korrekt - wieder falsche Darstellung', 'korrekt - falsche Darstellung', korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 25, [declaration(sp, aeltestes, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A2', 2, -, number, 'Ältesten'))], 'aeltestes([],Kfz).\n aeltestes([[_,Baujahr],Tail],Kfz):-(>=(Baujahr, Kfz), aeltestes(Tail, Baujahr)).\n aeltestes([[_,Baujahr],Tail],Kfz):-(>(Kfz, Baujahr)), aeltestes(Tail, Kfz).\n', [error(id(s7e), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [] sollte eine Nicht-Leer-Liste sein.'), highlighted(['aeltestes( [] , Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>=Kfz, aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, [['_', 'Baujahr'], 'Tail'])]), hint('[[_, Baujahr], Tail]: Dieses Argument sollte in folgender Form zerlegt werden: [Head|Rest]'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>=Kfz, aeltestes(Tail, Baujahr).
', 'aeltestes( [[_, Baujahr], Tail] , Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
'])), error(id(s3fa), penalty(0.7), poslist([pos(3, 2), pos(3, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>=Kfz, aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):- Kfz>Baujahr , aeltestes(Tail, Kfz) .
'])), error(id(s8n), penalty(0.3), poslist([pos(3, 1)]), hint('Der Operator > ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: > ist empfohlen.'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>=Kfz, aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):- Kfz>Baujahr , aeltestes(Tail, Kfz).
'])), error(id(post7a), penalty(0.8), poslist([pos(3, 1, 1, 'Kfz')]), hint('Kfz muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>=Kfz, aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):- Kfz >Baujahr, aeltestes(Tail, Kfz).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, [['_', 'Baujahr'], 'Tail'])]), hint('[[_, Baujahr], Tail]: Dieses Argument sollte in folgender Form zerlegt werden: [Head|Rest]'), highlighted(['aeltestes([], Kfz).
', 'aeltestes( [[_, Baujahr], Tail] , Kfz):-Baujahr>=Kfz, aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):- Baujahr>=Kfz , aeltestes(Tail, Baujahr) .
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
'])), error(id(s8j), penalty(0.5), poslist([pos(2, 2, 2, 'Baujahr'), pos(2, 1, 2, 'Kfz')]), hint('Kfz soll mit einer Variable an der Position von Baujahr unifizieren.'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>= Kfz , aeltestes(Tail, Baujahr ).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'Kfz'), pos(2, 1, 2, 'Kfz')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz ):-Baujahr>= Kfz , aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
'])), error(id(post7a), penalty(0.8), poslist([pos(2, 1, 2, 'Kfz')]), hint('Kfz muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['aeltestes([], Kfz).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>= Kfz , aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'Kfz')]), hint('Kfz: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['aeltestes([], Kfz ).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Baujahr>=Kfz, aeltestes(Tail, Baujahr).
', 'aeltestes([[_, Baujahr], Tail], Kfz):-Kfz>Baujahr, aeltestes(Tail, Kfz).
']))], [ok, ok, ok, nok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, 'der Operator > ist vorhanden, nur an der falschen Stelle!', korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 26, [declaration(sp, bj, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, bj, 2, bj/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, bj, 2, bj/2, main, 'A2', 2, -, number, 'Ältesten'))], 'bj([],_).\n bj([[_|Jahr]|Rest],Altjahr):-Jahr=Altjahr, bj(Rest, Altjahr).\n', [error(id(s7e), penalty(0.8), poslist([pos(1, 0, 1)]), hint('An der Stelle von [] sollte eine Nicht-Leer-Liste sein.'), highlighted(['bj( [] , _).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr=', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
'])), error(id(s7k), penalty(0.8), poslist([pos(1, 0, 2, '_')]), hint('An der Stelle von _ erwarten wir eine Variable.'), highlighted(['bj([], _ ).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr=', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['_'|'Jahr'])]), hint('[_|Jahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['bj([], _).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr=', 'bj( [[_|Jahr]|Rest] , Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
'])), error(id(s3fa), penalty(0.7), poslist([pos(3, 2), pos(3, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['bj([], _).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr=', 'bj([[_|Jahr]|Rest], Altjahr):- Jahr>Altjahr , bj(Rest, Altjahr) .
'])), error(id(post7a), penalty(0.8), poslist([pos(3, 1, 2, 'Altjahr')]), hint('Altjahr muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['bj([], _).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr=', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr> Altjahr , bj(Rest, Altjahr).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['_'|'Jahr'])]), hint('[_|Jahr]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['bj([], _).
', 'bj( [[_|Jahr]|Rest] , Altjahr):-Jahr=', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 2), pos(2, 1)]), hint('Das rekursive Subziel 2 muss vor dem 1. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['bj([], _).
', 'bj([[_|Jahr]|Rest], Altjahr):- Jahr= , bj(Rest, Jahr) .
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
'])), error(id(s8j), penalty(0.5), poslist([pos(2, 2, 2, 'Jahr'), pos(2, 1, 2, 'Altjahr')]), hint('Altjahr soll mit einer Variable an der Position von Jahr unifizieren.'), highlighted(['bj([], _).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr=< Altjahr , bj(Rest, Jahr ).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
'])), error(id(s4a1), penalty(0.5), poslist([pos(2, 0, 2, 'Altjahr'), pos(2, 1, 2, 'Altjahr')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['bj([], _).
', 'bj([[_|Jahr]|Rest], Altjahr ):-Jahr=< Altjahr , bj(Rest, Jahr).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
'])), error(id(post7a), penalty(0.8), poslist([pos(2, 1, 2, 'Altjahr')]), hint('Altjahr muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['bj([], _).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr=< Altjahr , bj(Rest, Jahr).
', 'bj([[_|Jahr]|Rest], Altjahr):-Jahr>Altjahr, bj(Rest, Altjahr).
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], 'wieder Fehler in der Darstellung der Studentenloesungen'). test(exer14, 27, [declaration(sp, ganzalt, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, ganzalt, ganzalt/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, ganzalt, 2, ganzalt/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, ganzalt, 2, ganzalt/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, ganzalt, 3, ganzalt/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, ganzalt, 3, ganzalt/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, ganzalt, 3, ganzalt/2, accu, 'A2', 2, +, number, accu))], 'ganzalt(Liste,E):-ganzalt(Liste,10000,E).\n ganzalt([],A,A).\n ganzalt([[Kenn|Alter]|T],Acc,E):-(Alter[Kenn|Alter]
: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt([[Kenn|Alter]|T], Acc, E):-Alter', 'ganzalt( [[Kenn|Alter]|T] , Acc, E):-ganzalt(T, Acc, E).
'])), error(id(s8i), penalty(0.1), poslist([pos(4, 0, 2, 'Acc')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term Acc und einer anderen Variable.'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt([[Kenn|Alter]|T], Acc, E):-Alter', 'ganzalt([[Kenn|Alter]|T], Acc , E):-ganzalt(T, Acc, E).
'])), error(id(s8i), penalty(0.1), poslist([pos(4, 0, 1, ['Kenn'|'Alter'])]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term [Kenn|Alter] und einer anderen Variable.'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt([[Kenn|Alter]|T], Acc, E):-Alter', 'ganzalt( [[Kenn|Alter]|T] , Acc, E):-ganzalt(T, Acc, E).
'])), error(id(post5a), penalty(0.8), poslist([pos(4, 0, 1, 'Kenn')]), hint('Kenn: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt([[Kenn|Alter]|T], Acc, E):-Alter', 'ganzalt( [[Kenn|Alter]|T] , Acc, E):-ganzalt(T, Acc, E).
'])), error(id(post5a), penalty(0.8), poslist([pos(4, 0, 1, 'Alter')]), hint('Alter: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt([[Kenn|Alter]|T], Acc, E):-Alter', 'ganzalt( [[Kenn|Alter]|T] , Acc, E):-ganzalt(T, Acc, E).
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['Kenn'|'Alter'])]), hint('[Kenn|Alter]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt( [[Kenn|Alter]|T] , Acc, E):-Alter', 'ganzalt([[Kenn|Alter]|T], Acc, E):-ganzalt(T, Acc, E).
'])), error(id(s8n), penalty(0.3), poslist([pos(3, 1)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt([[Kenn|Alter]|T], Acc, E):- Alter , ganzalt(T, Alter, E).
', 'ganzalt([[Kenn|Alter]|T], Acc, E):-ganzalt(T, Acc, E).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'Kenn')]), hint('Kenn: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['ganzalt(Liste, E):-ganzalt(Liste, 10000, E).
', 'ganzalt([], A, A).
', 'ganzalt( [[Kenn|Alter]|T] , Acc, E):-Alter', 'ganzalt([[Kenn|Alter]|T], Acc, E):-ganzalt(T, Acc, E).
']))], [ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], 'Fehler in der Darstellung'). test(exer14, 28, [declaration(sp, old1, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, old, old1/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, old1, 2, old1/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, old1, 2, old1/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, old, 3, old1/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, old, 3, old1/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, old, 3, old1/2, accu, 'A2', 2, +, number, accu))], 'old1([[H|T]|Rest], Jahr):- old(Rest,T,Jahr).\n old([],J,J).\n old([[H|T]|Rest],J,J1):- Told1([[H|T]|Rest], Jahr)
:- old(Rest, T, Jahr) .
', 'old([], J, J).
', 'old([[H|T]|Rest], J, J1):-T', 'old([_|Rest], J, J1):-old(Rest, J, J1).
'])), error(id(s7k), penalty(0.8), poslist([pos(1, 0, 1, [['H'|'T']|'Rest'])]), hint('An der Stelle von [[H|T]|Rest] erwarten wir eine Variable.'), highlighted(['old1( [[H|T]|Rest] , Jahr):-old(Rest, T, Jahr).
', 'old([], J, J).
', 'old([[H|T]|Rest], J, J1):-T', 'old([_|Rest], J, J1):-old(Rest, J, J1).
'])), error(id(s1a2), penalty(0.1), poslist([pos(4, 0, 1, ['_'|'Rest'])]), hint('An der Stelle von [_|Rest] sollte eine eingebette (De-)Komposition (z.B. [[X|H]|T]) stattfinden.'), highlighted(['old1([[H|T]|Rest], Jahr):-old(Rest, T, Jahr).
', 'old([], J, J).
', 'old([[H|T]|Rest], J, J1):-T', 'old( [_|Rest] , J, J1):-old(Rest, J, J1).
'])), error(id(s8i), penalty(0.1), poslist([pos(4, 0, 2, 'J')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term J und einer anderen Variable.'), highlighted(['old1([[H|T]|Rest], Jahr):-old(Rest, T, Jahr).
', 'old([], J, J).
', 'old([[H|T]|Rest], J, J1):-T', 'old([_|Rest], J , J1):-old(Rest, J, J1).
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['H'|'T'])]), hint('[H|T]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['old1([[H|T]|Rest], Jahr):-old(Rest, T, Jahr).
', 'old([], J, J).
', 'old( [[H|T]|Rest] , J, J1):-T', 'old([_|Rest], J, J1):-old(Rest, J, J1).
'])), error(id(s8n), penalty(0.3), poslist([pos(3, 1)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['old1([[H|T]|Rest], Jahr):-old(Rest, T, Jahr).
', 'old([], J, J).
', 'old([[H|T]|Rest], J, J1):- T , old(Rest, T, J1).
', 'old([_|Rest], J, J1):-old(Rest, J, J1).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['old1([[H|T]|Rest], Jahr):-old(Rest, T, Jahr).
', 'old([], J, J).
', 'old( [[H|T]|Rest] , J, J1):-T', 'old([_|Rest], J, J1):-old(Rest, J, J1).
'])), error(id(post5a), penalty(0.8), poslist([pos(1, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['old1( [[H|T]|Rest] , Jahr):-old(Rest, T, Jahr).
', 'old([], J, J).
', 'old([[H|T]|Rest], J, J1):-T', 'old([_|Rest], J, J1):-old(Rest, J, J1).
']))], [ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 29, [declaration(sp, greis, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, greis, 2, greis/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, greis, 2, greis/2, main, 'A2', 2, -, number, 'Ältesten'))], 'greis([[HI|[HG|[]]]|[]], HG).\n greis([[HI|[HG|[]]]|T], HG):-greis(T,A), HG[H|T]
sollte eine eingebette (De-)Komposition (z.B. [[X|H]|T]) stattfinden.'), highlighted(['greis([[HI, HG]], HG).
', 'greis([[HI, HG]|T], HG):-greis(T, A), HG', 'greis( [H|T] , A):-greis(T, A).
'])), error(id(s8i), penalty(0.1), poslist([pos(3, 1, 2, 'A')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term A und einer anderen Variable.'), highlighted(['greis([[HI, HG]], HG).
', 'greis([[HI, HG]|T], HG):-greis(T, A), HG', 'greis([H|T], A):-greis(T, A ).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'H')]), hint('H: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['greis([[HI, HG]], HG).
', 'greis([[HI, HG]|T], HG):-greis(T, A), HG', 'greis( [H|T] , A):-greis(T, A).
'])), error(id(s8n), penalty(0.3), poslist([pos(2, 2)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['greis([[HI, HG]], HG).
', 'greis([[HI, HG]|T], HG):-greis(T, A), HG .
', 'greis([H|T], A):-greis(T, A).
'])), error(id(post5a), penalty(0.8), poslist([pos(2, 0, 1, 'HI')]), hint('HI: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['greis([[HI, HG]], HG).
', 'greis( [[HI, HG]|T] , HG):-greis(T, A), HG', 'greis([H|T], A):-greis(T, A).
'])), error(id(post5a), penalty(0.8), poslist([pos(1, 0, 1, 'HI')]), hint('HI: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['greis( [[HI, HG]] , HG).
', 'greis([[HI, HG]|T], HG):-greis(T, A), HG', 'greis([H|T], A):-greis(T, A).
']))], [ok, ok, ok, nok, ok, ok], [korrekt, korrekt, korrekt, 'ist das wirklich eindeutig?', korrekt, korrekt], ''). test(exer14, 30, [declaration(sp, alt, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, a, alt/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, alt, 2, alt/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, alt, 2, alt/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, a, 3, alt/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, a, 3, alt/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, a, 3, alt/2, accu, 'A2', 2, +, number, accu))], 'alt(Fahrzeuge,Baujahr):-a(Fahrzeuge,Akk,Baujahr).\n a([],X,X).\n a([[X|Y]|Z],Akk,Baujahr):-a(Z,Y,Baujahr), <(Y,Akk).\n', [error(id(s7h), penalty(0.01), poslist([]), hint('Eine Rekursionsklausel fehlt. Oder haben Sie ein rekursives Subziel vergessen?'), highlighted([' alt(Fahrzeuge, Baujahr) :- a(Fahrzeuge, Akk, Baujahr) .
', ' a([], X, X) .
', ' a([[X|Y]|Z], Akk, Baujahr) :- a(Z, Y, Baujahr) , Y .
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['X'|'Y'])]), hint('[X|Y]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['alt(Fahrzeuge, Baujahr):-a(Fahrzeuge, Akk, Baujahr).
', 'a([], X, X).
', 'a( [[X|Y]|Z] , Akk, Baujahr):-a(Z, Y, Baujahr), Y'])), error(id(s8n), penalty(0.3), poslist([pos(3, 2)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['alt(Fahrzeuge, Baujahr):-a(Fahrzeuge, Akk, Baujahr).
', 'a([], X, X).
', 'a([[X|Y]|Z], Akk, Baujahr):-a(Z, Y, Baujahr), Y .
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'X')]), hint('X: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['alt(Fahrzeuge, Baujahr):-a(Fahrzeuge, Akk, Baujahr).
', 'a([], X, X).
', 'a( [[X|Y]|Z] , Akk, Baujahr):-a(Z, Y, Baujahr), Y'])), error(id(post5c), penalty(0.8), poslist([pos(1, 1, 2, 'Akk')]), hint('Akk: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['alt(Fahrzeuge, Baujahr):-a(Fahrzeuge, Akk , Baujahr).
', 'a([], X, X).
', 'a([[X|Y]|Z], Akk, Baujahr):-a(Z, Y, Baujahr), Y']))], [ok, ok, nok, ok, ok], [korrekt, korrekt, 'die Loesung wir nicht korrekt angezeigt', korrekt, korrekt], ''). test(exer14, 31, [declaration(sp, alt, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, alt, alt/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, alt, 2, alt/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, alt, 2, alt/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, alt, 3, alt/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, alt, 3, alt/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, alt, 3, alt/2, accu, 'A2', 2, +, number, accu))], 'alt(Fahrzeuge,Baujahr):-alt(Fahrzeuge,Akk,Baujahr).\n alt([],[K|_],K).\n alt([H|T],BA,E):-[_,BJ]=H, BJ=BA, alt(T,BA,E).\n', [error(id(pre2e), penalty(0.3), poslist([pos(2, 0, 2, ['K'|'_'])]), hint('Der Typ von [K|_] stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['alt(Fahrzeuge, Baujahr):-alt(Fahrzeuge, Akk, Baujahr).
', 'alt([], [K|_] , K).
', 'alt([H|T], BA, E):-[_, BJ]=H, BJ', 'alt([H|T], BA, E):-[_, BJ]=H, BJ>=BA, alt(T, BA, E).
']))], [ok], [korrekt], ''). test(exer14, 32, [declaration(sp, aeltestes_kfz, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, aeltestes, aeltestes_kfz/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe'), d('A3', +, number, accu)])], [basecase, recursivecase, recursivecase, nonrecursive], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes_kfz, 2, aeltestes_kfz/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes_kfz, 2, aeltestes_kfz/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 3, aeltestes_kfz/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 3, aeltestes_kfz/2, accu, 'A2', 2, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, aeltestes, 3, aeltestes_kfz/2, accu, 'A3', 3, +, number, accu))], 'aeltestes([],X,Jahr).\n aeltestes([[K|R]|Rest],X,Jahr):-aeltestes(Rest,[[K|R]|X],Jahr), R>Jahr.\n aeltestes([[K|R]|Rest],X,Jahr):-aeltestes(Rest,[[K|R]|X],R), R=aeltestes([], X, Jahr)
.
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], R), R=', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(pa8), penalty(0.3), poslist([pos(3)]), hint('In der Rekursionsklausel des Akkumulations-Prädikats muss das Ausgabeargument beim rekursiven Aufruf unverändert beleiben, bis der Rekursionsabschluss erreicht wird. Wir können nicht feststellen, welches Argument in dieser Klausel die Charakteristik eines Ausgabearguments hat.'), highlighted(['aeltestes([], X, Jahr).
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', ' aeltestes([[K|R]|Rest], X, Jahr) :- aeltestes(Rest, [[K|R]|X], R) , R= .
', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(s7k), penalty(0.8), poslist([pos(4, 0, 1, [['K'|'R']|'Rest'])]), hint('An der Stelle von [[K|R]|Rest] erwarten wir eine Variable.'), highlighted(['aeltestes([], X, Jahr).
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], R), R=', 'aeltestes_kfz( [[K|R]|Rest] , R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['K'|'R'])]), hint('[K|R]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['aeltestes([], X, Jahr).
', 'aeltestes( [[K|R]|Rest] , X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], R), R=', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(s3d), penalty(0.5), poslist([pos(2, 1, 2, [['K'|'R']|'X']), pos(2, 0, 2, 'X')]), hint('[[K|R]|X] sollte mit der Argumentposition des Terms X koreferieren.'), highlighted(['aeltestes([], X, Jahr).
', 'aeltestes([[K|R]|Rest], X , Jahr):-aeltestes(Rest, [[K|R]|X] , Jahr), R>Jahr.
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], R), R=', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 1, ['K'|'R'])]), hint('[K|R]: Dieses Argument sollte in folgender Form zerlegt werden: [_, Jahr]'), highlighted(['aeltestes([], X, Jahr).
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', 'aeltestes( [[K|R]|Rest] , X, Jahr):-aeltestes(Rest, [[K|R]|X], R), R=', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(s3d), penalty(0.5), poslist([pos(3, 1, 2, [['K'|'R']|'X']), pos(3, 0, 2, 'X')]), hint('[[K|R]|X] sollte mit der Argumentposition des Terms X koreferieren.'), highlighted(['aeltestes([], X, Jahr).
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', 'aeltestes([[K|R]|Rest], X , Jahr):-aeltestes(Rest, [[K|R]|X] , R), R=', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 2, 'X')]), hint('X: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['aeltestes([], X , Jahr).
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], R), R=', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 3, 'Jahr')]), hint('Jahr: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['aeltestes([], X, Jahr ).
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], Jahr), R>Jahr.
', 'aeltestes([[K|R]|Rest], X, Jahr):-aeltestes(Rest, [[K|R]|X], R), R=', 'aeltestes_kfz([[K|R]|Rest], R):-aeltestes([[K|R]|Rest], [], R).
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt], 'Die Loesungen werden nicht korrekt dargestellt, wenn ein kleiner-Zeichen darin vorkommt.'). test(exer14, 33, [declaration(sp, alt, [d('A1', -, number, 'Ältesten'), d('A2', +, list, 'Bestandsliste')])], [recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, alt, 2, alt/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, alt, 2, alt/2, main, 'A1', 1, -, number, 'Ältesten'))], 'alt(Jahr, Liste):-Liste=[Kopf|Rest], Kopf=[Kz|Bj], Bj>Jahr, alt(Bj, Rest).\n', [error(id(g6), penalty(0.5), poslist([pos(1)]), hint('Wenn Sie die Rekursion verwenden und jeweils ein Element zum rekursiven Subziel übergeben, dann brauchen Sie einen und nur einen Rekursionsabschluss.'), highlighted([' alt(Jahr, Liste) :- Liste=[Kopf|Rest] , Kopf=[Kz|Bj] , Bj>Jahr , alt(Bj, Rest) .
']))], [ok], [korrekt], ''). test(exer14, 34, [declaration(sp, aeltestes, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, hilf, aeltestes/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Summe'), d('A3', +, number, accu)])], [nonrecursive, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes_kfz/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes_kfz/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, hilf, 3, aeltestes/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, hilf, 3, aeltestes/2, accu, 'A2', 2, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, hilf, 3, aeltestes/2, accu, 'A3', 3, +, number, accu))], 'aeltestes(Fahrzeug,Liste):-hilf(Liste,Fahrzeug,Min).\n hilf([],_,_).\n hilf([[[K,Bj]|_]|T],Aeltes,Min):-Bj', 'hilf([], _, _).
', 'hilf([[[K, Bj]|_]|T], Aeltes, Min):-Bj', 'hilf([[[K, Bj]|_]|T], Aeltes , Min):-hilf(T, Aeltes, Min).
']))], [ok], [korrekt], ''). test(exer14, 37, [declaration(sp, aeltestes, [d('A1', +, list, 'Bestandsliste'), d('A2', -, number, 'Ältesten')]), declaration(sp, aeltestes, aeltestes/2, accu, [d('A1', +, list, 'Bestandsliste'), d('A2', +, number, accu), d('A3', -, number, 'Summe')])], [nonrecursive, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 2, aeltestes/2, main, 'A2', 2, -, number, 'Ältesten')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, aeltestes, 3, aeltestes/2, accu, 'A1', 1, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, aeltestes, 3, aeltestes/2, accu, 'A3', 3, -, number, 'Baujahr')), map(dec, predicatedec(tp, tpaltaccu, 3, tpalt/2, accu, 'Arg3', 3, +, number, ['Akku, accu']), predicatedec(sp, aeltestes, 3, aeltestes/2, accu, 'A2', 2, +, number, accu))], 'aeltestes(Liste, Baujahr):-aeltestes(Liste, 1999, Baujahr).\n aeltestes([], Baujahr, Baujahr).\n aeltestes([[A,B]|C], X, Baujahr):-B=X, aeltestes(C,X, Baujahr).\n', [error(id(s8n), penalty(0.3), poslist([pos(4, 1)]), hint('Der Operator >= ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: > ist empfohlen.'), highlighted(['aeltestes(Liste, Baujahr):-aeltestes(Liste, 1999, Baujahr).
', 'aeltestes([], Baujahr, Baujahr).
', 'aeltestes([[A, B]|C], X, Baujahr):-B', 'aeltestes([[A, B]|C], X, Baujahr):- B>=X , aeltestes(C, X, Baujahr).
'])), error(id(post5a), penalty(0.8), poslist([pos(4, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes(Liste, Baujahr):-aeltestes(Liste, 1999, Baujahr).
', 'aeltestes([], Baujahr, Baujahr).
', 'aeltestes([[A, B]|C], X, Baujahr):-B', 'aeltestes( [[A, B]|C] , X, Baujahr):-B>=X, aeltestes(C, X, Baujahr).
'])), error(id(s8n), penalty(0.3), poslist([pos(3, 1)]), hint('Der Operator < ist nicht korrekt oder die Argumente sind vertauscht. Dieser Operator: =< ist empfohlen.'), highlighted(['aeltestes(Liste, Baujahr):-aeltestes(Liste, 1999, Baujahr).
', 'aeltestes([], Baujahr, Baujahr).
', 'aeltestes([[A, B]|C], X, Baujahr):- B , aeltestes(C, B, Baujahr).
', 'aeltestes([[A, B]|C], X, Baujahr):-B>=X, aeltestes(C, X, Baujahr).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'A')]), hint('A: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['aeltestes(Liste, Baujahr):-aeltestes(Liste, 1999, Baujahr).
', 'aeltestes([], Baujahr, Baujahr).
', 'aeltestes( [[A, B]|C] , X, Baujahr):-B', 'aeltestes([[A, B]|C], X, Baujahr):-B>=X, aeltestes(C, X, Baujahr).
']))], [ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt], ''). test(exer14, 38, [declaration(sp, daf, [d('A1', -, number, 'Ältesten'), d('A2', +, list, 'Bestandsliste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg1', 1, +, list, ['Bestand an Kraftfahrzeugen', 'KFZ', 'Bestandsliste']), predicatedec(sp, daf, 2, daf/2, main, 'A2', 2, +, list, 'Bestandsliste')), map(dec, predicatedec(tp, tpalt, 2, tpalt/2, main, 'Arg2', 2, -, number, ['Baujahr des ältesten Fahrzeugs']), predicatedec(sp, daf, 2, daf/2, main, 'A1', 1, -, number, 'Ältesten'))], 'daf(Alter,[]).\n daf(Alter,[A1|R]):-Alter2 is A1, A1>Alter, daf(Alter2,R).\n', [error(id(s7e), penalty(0.8), poslist([pos(1, 0, 2)]), hint('An der Stelle von [] sollte eine Nicht-Leer-Liste sein.'), highlighted(['daf(Alter, [] ).
', 'daf(Alter, [A1|R]):-Alter2 is A1, A1>Alter, daf(Alter2, R).
'])), error(id(s7h), penalty(0.01), poslist([]), hint('Eine Rekursionsklausel fehlt. Oder haben Sie ein rekursives Subziel vergessen?'), highlighted([' daf(Alter, []) .
', ' daf(Alter, [A1|R]) :- Alter2 is A1 , A1>Alter , daf(Alter2, R) .
'])), error(id(s1a2), penalty(0.1), poslist([pos(2, 0, 2, ['A1'|'R'])]), hint('An der Stelle von [A1|R] sollte eine eingebette (De-)Komposition (z.B. [[X|H]|T]) stattfinden.'), highlighted(['daf(Alter, []).
', 'daf(Alter, [A1|R] ):-Alter2 is A1, A1>Alter, daf(Alter2, R).
'])), error(id(s3fa), penalty(0.7), poslist([pos(2, 3), pos(2, 2)]), hint('Das rekursive Subziel 3 muss vor dem 2. Subziel ausgeführt werden. Tauschen Sie die Reihenfolge.'), highlighted(['daf(Alter, []).
', 'daf(Alter, [A1|R]):-Alter2 is A1, A1>Alter , daf(Alter2, R) .
'])), error(id(s5b), penalty(0.1), poslist([pos(2, 1)]), hint('Alter2 is A1 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['daf(Alter, []).
', 'daf(Alter, [A1|R]):- Alter2 is A1 , A1>Alter, daf(Alter2, R).
'])), error(id(s8i), penalty(0.1), poslist([pos(2, 3, 1, 'Alter2')]), hint('Im Klauselkörper fehlt ein arithmetischer Vergleich zwischen einer Variable im Term Alter2 und einer anderen Variable.'), highlighted(['daf(Alter, []).
', 'daf(Alter, [A1|R]):-Alter2 is A1, A1>Alter, daf( Alter2 , R).
'])), error(id(s8j), penalty(0.5), poslist([pos(2, 3, 1, 'Alter2'), pos(2, 2, 1, 'A1')]), hint('A1 soll mit einer Variable an der Position von Alter2 unifizieren.'), highlighted(['daf(Alter, []).
', 'daf(Alter, [A1|R]):-Alter2 is A1, A1 >Alter, daf( Alter2 , R).
'])), error(id(s4a), penalty(0.5), poslist([pos(2, 0, 2, ['A1'|'R']), pos(2, 2, 1, 'A1')]), hint('Die Unifikation zwischen [A1|R] und A1 ist nicht erforderlich.'), highlighted(['daf(Alter, []).
', 'daf(Alter, [A1|R] ):-Alter2 is A1, A1 >Alter, daf(Alter2, R).
'])), error(id(post7a), penalty(0.8), poslist([pos(2, 2, 2, 'Alter')]), hint('Alter muss gebunden sein, bevor es in Vergleichsoperationen benutzt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['daf(Alter, []).
', 'daf(Alter, [A1|R]):-Alter2 is A1, A1> Alter , daf(Alter2, R).
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 1, 'Alter')]), hint('Alter: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['daf( Alter , []).
', 'daf(Alter, [A1|R]):-Alter2 is A1, A1>Alter, daf(Alter2, R).
']))], [ok, ok, ok, ok, ok, ok, ok, nok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, korrekt, 'wie ist das gemeint?', korrekt, korrekt], ''). test(exer8, 1, [declaration(sp, sender, [d('A1', +, atom, 'Sender'), d('A2', +, list, 'GesamtSenderListe'), d('A3', -, list, 'Liste')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, sender, 3, sender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, sender, 3, sender/3, main, 'A1', 1, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, sender, 3, sender/3, main, 'A2', 2, +, list, 'GesamtListe'))], 'sender(_,[],[]).\n sender(GSender,[AktS|Rest],[AktS|GSRest]):-AktS=[GSender,_,_],sender(GSender,Rest,GRest).\n sender(GSender,[AktS|Rest],GSRest):-not(AktS=[GSender,_,_]),sender(GSender, Rest, GSRest).\n', [error(id(g7), penalty(0.5), poslist([pos(3, 1)]), hint('not/1: Dieses Subziel ist unbekannt.'), highlighted(['sender(_, [], []).
', 'sender(GSender, [AktS|Rest], [AktS|GSRest]):-AktS=[GSender, _, _], sender(GSender, Rest, GRest).
', 'sender(GSender, [AktS|Rest], GSRest):- not(AktS=[GSender, _, _]) , sender(GSender, Rest, GSRest).
']))], [nok], ['Systempraedikate nicht erlaubt?'], ''). test(exer8, 2, [declaration(sp, sender, [d('A1', +, atom, 'Sender'), d('A2', +, list, 'GesamtSenderListe'), d('A3', -, list, 'Liste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, sender, 3, sender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, sender, 3, sender/3, main, 'A1', 1, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, sender, 3, sender/3, main, 'A2', 2, +, list, 'GesamtListe'))], 'sender(_,[],[]).\n sender(X, [[X,Y,Z]|T], [[X,Y,Z]|H]):-zuschauer([[X,Y,Z]|T]), sender(X,T,H).\n', [error(id(g7), penalty(0.5), poslist([pos(2, 1)]), hint('zuschauer/1: Dieses Subziel ist unbekannt.'), highlighted(['sender(_, [], []).
', 'sender(X, [[X, Y, Z]|T], [[X, Y, Z]|H]):- zuschauer([[X, Y, Z]|T]) , sender(X, T, H).
']))], [nok], ['es ist in der Datenbasis enthalten'], ''). test(exer8, 3, [declaration(sp, einsender, [d('A1', +, list, 'GesamtListe'), d('A2', +, atom, 'Sender'), d('A3', -, list, 'Liste')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, einsender, 3, einsender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, einsender, 3, einsender/3, main, 'A2', 2, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, einsender, 3, einsender/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'einsender([], _, []).\n einsender([[Prog, Send, Zahl]|RZuschauer], Programm, [[Prog, Send, Zahl], RErg]):-Send = Programm, einsender(RZuschauer, Programm, RErg).\n einsender([[Prog, Send, Zahl]|RZuschauer], Programm, RErg):-Send\\== Programm, einsender(RZuschauer, Programm, RErg).\n', [error(id(s1d2), penalty(0.5), poslist([pos(3, 0, 1, 'Prog'), pos(3, 1, 1, 'Send')]), hint(' Eine Unifikation zwischen der Variable im Term Prog und einer Variable des Terms Send ist erforderlich.'), highlighted(['einsender([], _, []).
', 'einsender([[Prog, Send, Zahl]|RZuschauer], Programm, [[Prog, Send, Zahl], RErg]):-Send=Programm, einsender(RZuschauer, Programm, RErg).
', 'einsender( [[Prog, Send, Zahl]|RZuschauer] , Programm, RErg):- Send \\==Programm, einsender(RZuschauer, Programm, RErg).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'Prog')]), hint('Prog: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['einsender([], _, []).
', 'einsender([[Prog, Send, Zahl]|RZuschauer], Programm, [[Prog, Send, Zahl], RErg]):-Send=Programm, einsender(RZuschauer, Programm, RErg).
', 'einsender( [[Prog, Send, Zahl]|RZuschauer] , Programm, RErg):-Send\\==Programm, einsender(RZuschauer, Programm, RErg).
'])), error(id(post5a), penalty(0.8), poslist([pos(3, 0, 1, 'Zahl')]), hint('Zahl: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['einsender([], _, []).
', 'einsender([[Prog, Send, Zahl]|RZuschauer], Programm, [[Prog, Send, Zahl], RErg]):-Send=Programm, einsender(RZuschauer, Programm, RErg).
', 'einsender( [[Prog, Send, Zahl]|RZuschauer] , Programm, RErg):-Send\\==Programm, einsender(RZuschauer, Programm, RErg).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 3, [['Prog', 'Send', 'Zahl'], 'RErg'])]), hint('[[Prog, Send, Zahl], RErg]: Dieses Argument sollte in folgender Form zerlegt werden: [Head|Tail1]'), highlighted(['einsender([], _, []).
', 'einsender([[Prog, Send, Zahl]|RZuschauer], Programm, [[Prog, Send, Zahl], RErg] ):-Send=Programm, einsender(RZuschauer, Programm, RErg).
', 'einsender([[Prog, Send, Zahl]|RZuschauer], Programm, RErg):-Send\\==Programm, einsender(RZuschauer, Programm, RErg).
'])), error(id(s1d2), penalty(0.5), poslist([pos(2, 0, 3, 'Prog'), pos(2, 2, 2, 'Programm')]), hint(' Eine Unifikation zwischen der Variable im Term Prog und einer Variable des Terms Programm ist erforderlich.'), highlighted(['einsender([], _, []).
', 'einsender([[Prog, Send, Zahl]|RZuschauer], Programm, [[Prog, Send, Zahl], RErg] ):-Send=Programm, einsender(RZuschauer, Programm , RErg).
', 'einsender([[Prog, Send, Zahl]|RZuschauer], Programm, RErg):-Send\\==Programm, einsender(RZuschauer, Programm, RErg).
']))], [ok, ok, ok, ok, ok], [korrekt, korrekt, korrekt, korrekt, korrekt], 'Die Kommentare sind im Hinblick auf die Musterloesung korrekt. Die Studentenloesung jedenfalls ist auch fast richtig, bis auf dass die Argumentpositionen vertauscht wurden. \r\nD.h. er achtet nicht auf die Sender sondern auf die Sendungen.\r\n'). test(exer8, 4, [declaration(sp, zusch_sender, [d('A1', +, list, 'GesamtListe'), d('A2', +, atom, 'Sender'), d('A3', -, list, 'Liste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, zusch_sender, 3, zusch_sender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, zusch_sender, 3, zusch_sender/3, main, 'A2', 2, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, zusch_sender, 3, zusch_sender/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'zusch_sender([], _, []).\n zusch_sender([[Sender, X,Y]|Rest], Sender, [[Sender, X,Y]|Rest2]):- zusch_sender(Rest, Sender, Rest2).\n', [error(id(s7h), penalty(0.01), poslist([]), hint('Eine Rekursionsklausel fehlt. Oder haben Sie ein rekursives Subziel vergessen?'), highlighted([' zusch_sender([], _, []) .
', ' zusch_sender([[Sender, X, Y]|Rest], Sender, [[Sender, X, Y]|Rest2]) :- zusch_sender(Rest, Sender, Rest2) .
']))], [ok], [korrekt], ''). test(exer8, 5, [declaration(sp, sender, [d('A1', +, list, 'GesamtListe'), d('A2', +, atom, 'Sender'), d('A3', -, list, 'Liste')])], [basecase, recursivecase, basecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, sender, 3, sender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, sender, 3, sender/3, main, 'A2', 2, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, sender, 3, sender/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'sender([],_,[]).\n sender([X|Y],XX,Z):-X=[XX|T], sender([Y],XX,Z).\n sender([[XX|T]|Y],XX,[X]).\n', [error(id(s7h), penalty(0.01), poslist([]), hint('Eine Rekursionsklausel fehlt. Oder haben Sie ein rekursives Subziel vergessen?'), highlighted([' sender([], _, []) .
', ' sender([X|Y], XX, Z) :- X=[XX|T] , sender([Y], XX, Z) .
', ' sender([[XX|T]|Y], XX, [X]) .
'])), error(id(s7i), penalty(0.01), poslist([pos(3)]), hint('sender/3: Die Prädikatsdefinition hat mehr Rekursionsabschlüsse als erforderlich.'), highlighted(['sender([], _, []).
', 'sender([X|Y], XX, Z):-X=[XX|T], sender([Y], XX, Z).
', ' sender([[XX|T]|Y], XX, [X]) .
'])), error(id(s1e), penalty(0.5), poslist([pos(2, 1, 2, ['XX'|'T'])]), hint('[XX|T]: Dieses Argument sollte in folgender Form zerlegt werden: [SenderName1, _, _]'), highlighted(['sender([], _, []).
', 'sender([X|Y], XX, Z):-X= [XX|T] , sender([Y], XX, Z).
', 'sender([[XX|T]|Y], XX, [X]).
'])), error(id(s3a), penalty(0.1), poslist([pos(2, 0, 1, ['X'|'Y']), pos(2, 2, 1, ['Y'])]), hint('[X|Y]: sollte rekursiv ab/aufgebaut werden.'), highlighted(['sender([], _, []).
', 'sender( [X|Y] , XX, Z):-X=[XX|T], sender( [Y] , XX, Z).
', 'sender([[XX|T]|Y], XX, [X]).
'])), error(id(s10a), penalty(0.1), poslist([pos(2)]), hint('Es soll einen Test zwischen 2 Terms/Variablen/Atome/Nummer in dieser Klausel geben.'), highlighted(['sender([], _, []).
', ' sender([X|Y], XX, Z) :- X=[XX|T] , sender([Y], XX, Z) .
', 'sender([[XX|T]|Y], XX, [X]).
'])), error(id(post5c), penalty(0.8), poslist([pos(2, 1, 2, 'T')]), hint('T: Diese Variable existiert im Klauselkörper, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['sender([], _, []).
', 'sender([X|Y], XX, Z):-X= [XX|T] , sender([Y], XX, Z).
', 'sender([[XX|T]|Y], XX, [X]).
']))], [nok, ok, ok, ok, ok, ok], ['die 2. Zeile hat eine Rekursionsklausel - es wird nicht klar, worauf sich die Aussage bezieht.', 'bezieht sich das nur auf die dritte Zeile?', korrekt, korrekt, korrekt, korrekt], 'Terms - Termen'). test(exer8, 6, [declaration(sp, sendung_von_sender, [d('A1', +, list, 'GesamtListe'), d('A2', +, atom, 'Sender'), d('A3', -, list, 'Liste')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, sendung_von_sender, 3, sendung_von_sender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, sendung_von_sender, 3, sendung_von_sender/3, main, 'A2', 2, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, sendung_von_sender, 3, sendung_von_sender/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'sendung_von_sender([],_,[]).\n sendung_von_sender([[Y,Send|Zahl]|T],Y,[Send,Zahl|R1]):-sendung_von_sender(T,Y,R1).\n', [error(id(s7h), penalty(0.01), poslist([]), hint('Eine Rekursionsklausel fehlt. Oder haben Sie ein rekursives Subziel vergessen?'), highlighted([' sendung_von_sender([], _, []) .
', ' sendung_von_sender([[Y, Send|Zahl]|T], Y, [Send, Zahl|R1]) :- sendung_von_sender(T, Y, R1) .
'])), error(id(s1a2), penalty(0.1), poslist([pos(2, 0, 3, ['Send', 'Zahl'|'R1'])]), hint('An der Stelle von [Send, Zahl|R1] sollte eine eingebette (De-)Komposition (z.B. [[X|H]|T]) stattfinden.'), highlighted(['sendung_von_sender([], _, []).
', 'sendung_von_sender([[Y, Send|Zahl]|T], Y, [Send, Zahl|R1] ):-sendung_von_sender(T, Y, R1).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 1, ['Y', 'Send'|'Zahl'])]), hint('[Y, Send|Zahl]: Dieses Argument sollte in folgender Form zerlegt werden: [SenderName, _, _]'), highlighted(['sendung_von_sender([], _, []).
', 'sendung_von_sender( [[Y, Send|Zahl]|T] , Y, [Send, Zahl|R1]):-sendung_von_sender(T, Y, R1).
'])), error(id(s1f), penalty(0.5), poslist([pos(2, 0, 3, ['Send', 'Zahl'|'R1'])]), hint('[Send, Zahl|R1]: Dieses Argument sollte in folgender Form zerlegt werden: [Head|Tail1]'), highlighted(['sendung_von_sender([], _, []).
', 'sendung_von_sender([[Y, Send|Zahl]|T], Y, [Send, Zahl|R1] ):-sendung_von_sender(T, Y, R1).
']))], [nok, ok, ok, ok], ['in Zeile zwei gibt es eine Rekursonsklausel', korrekt, korrekt, korrekt], ''). test(exer8, 7, [declaration(sp, sender, [d('A1', +, list, 'GesamtListe'), d('A2', -, list, 'Liste'), d('A3', +, atom, 'Sender')])], [basecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, sender, 3, sender/3, main, 'A2', 2, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, sender, 3, sender/3, main, 'A3', 3, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, sender, 3, sender/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'sender([], [], _).\n sender([X|Y], [[A|B]|Z], Sender):- [A|B]=X, A=Sender, sender(Y,Z,Sender).\n', [error(id(s7h), penalty(0.01), poslist([]), hint('Eine Rekursionsklausel fehlt. Oder haben Sie ein rekursives Subziel vergessen?'), highlighted([' sender([], [], _) .
', ' sender([X|Y], [[A|B]|Z], Sender) :- [A|B]=X , A=Sender , sender(Y, Z, Sender) .
'])), error(id(s1e), penalty(0.5), poslist([pos(2, 1, 1, ['A'|'B'])]), hint('[A|B]: Dieses Argument sollte in folgender Form zerlegt werden: [SenderName, _, _]'), highlighted(['sender([], [], _).
', 'sender([X|Y], [[A|B]|Z], Sender):- [A|B] =X, A=Sender, sender(Y, Z, Sender).
']))], [ok, ok], ['', ''], ''). test(exer8, 8, [declaration(sp, sender, [d('A1', +, list, 'GesamtListe'), d('A2', +, atom, 'Sender'), d('A3', -, list, 'Liste')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, sender, 3, sender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, sender, 3, sender/3, main, 'A2', 2, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, sender, 3, sender/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'sender([], _,[]).\n sender(zuschauer([X|Y]), Sender, [A|B]):- [Sender|_]=X, X=A, sender(Y,Sender,B).\n sender(zuschauer([X|Y]), Sender, [B]):-sender(Y,Sender, B).\n', [error(id(pre2c), penalty(0.3), poslist([pos(2, 0, 1, zuschauer(['X'|'Y']))]), hint('Der Typ von zuschauer([X|Y]) stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['sender([], _, []).
', 'sender( zuschauer([X|Y]) , Sender, [A|B]):-[Sender|_]=X, X=A, sender(Y, Sender, B).
', 'sender(zuschauer([X|Y]), Sender, [B]):-sender(Y, Sender, B).
'])), error(id(pre2c), penalty(0.3), poslist([pos(3, 0, 1, zuschauer(['X'|'Y']))]), hint('Der Typ von zuschauer([X|Y]) stimmt nicht mit der Deklaration überein. Es sollte eine Liste sein.'), highlighted(['sender([], _, []).
', 'sender(zuschauer([X|Y]), Sender, [A|B]):-[Sender|_]=X, X=A, sender(Y, Sender, B).
', 'sender( zuschauer([X|Y]) , Sender, [B]):-sender(Y, Sender, B).
']))], [ok, ok], ['', ''], ''). test(exer8, 9, [declaration(sp, neu, [d('A1', +, list, 'GesamtListe'), d('A2', +, atom, 'Sender'), d('A3', -, list, 'Liste')])], [basecase, basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, neu, 3, neu/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, neu, 3, neu/3, main, 'A2', 2, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, neu, 3, neu/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'neu(_,_,[]).\n neu([], N, []).\n neu([[F|RST]|Alt], N, [[F|RST]|Neu]):- N2 is N-1, neu(Alt, N2, Neu).\n neu([_|Alt], N, [_|Neu, F]):- neu(Alt, N2, Neu), N2 is N-1.\n', [error(id(s7k), penalty(0.8), poslist([pos(4, 0, 3, ['_'| ('Neu', 'F')])]), hint('An der Stelle von [_| (Neu, F)] erwarten wir eine Variable.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)] ):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(s7i), penalty(0.01), poslist([pos(1)]), hint('neu/3: Die Prädikatsdefinition hat mehr Rekursionsabschlüsse als erforderlich.'), highlighted([' neu(_, _, []) .
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)]):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(s1a2), penalty(0.1), poslist([pos(4, 0, 1, ['_'|'Alt'])]), hint('An der Stelle von [_|Alt] sollte eine eingebette (De-)Komposition (z.B. [[X|H]|T]) stattfinden.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu( [_|Alt] , N, [_| (Neu, F)]):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(s1g), penalty(0.1), poslist([pos(4, 0, 3, ['_'| ('Neu', 'F')])]), hint('[_| (Neu, F)]: Diese (De-)Komposition ist überflüssig.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)] ):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(s3d), penalty(0.5), poslist([pos(4, 1, 3, 'Neu'), pos(4, 0, 3, ['_'| ('Neu', 'F')])]), hint('Neu sollte mit der Argumentposition des Terms [_| (Neu, F)] koreferieren.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)] ):-neu(Alt, N2, Neu ), N2 is N-1.
'])), error(id(s3d), penalty(0.5), poslist([pos(4, 1, 2, 'N2'), pos(4, 0, 2, 'N')]), hint('N2 sollte mit der Argumentposition des Terms N koreferieren.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N , [_| (Neu, F)]):-neu(Alt, N2 , Neu), N2 is N-1.
'])), error(id(s5b), penalty(0.1), poslist([pos(4, 2)]), hint('N2 is N-1 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)]):-neu(Alt, N2, Neu), N2 is N-1 .
'])), error(id(s10a), penalty(0.1), poslist([pos(4)]), hint('Es soll einen Test zwischen 2 Terms/Variablen/Atome/Nummer in dieser Klausel geben.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', ' neu([_|Alt], N, [_| (Neu, F)]) :- neu(Alt, N2, Neu) , N2 is N-1 .
'])), error(id(post5a), penalty(0.8), poslist([pos(4, 0, 3, 'F')]), hint('F: Diese Variable/Konstante existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable/Konstante anonym sein?'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)] ):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(s1f), penalty(0.5), poslist([pos(3, 0, 3, ['F'|'RST'])]), hint('[F|RST]: Dieses Argument sollte in folgender Form zerlegt werden: [SenderName, _, _]'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu] ):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)]):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(s3d), penalty(0.5), poslist([pos(3, 2, 2, 'N2'), pos(3, 0, 2, 'N')]), hint('N2 sollte mit der Argumentposition des Terms N koreferieren.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N , [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2 , Neu).
', 'neu([_|Alt], N, [_| (Neu, F)]):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(s5b), penalty(0.1), poslist([pos(3, 1)]), hint('N2 is N-1 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['neu(_, _, []).
', 'neu([], N, []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):- N2 is N-1 , neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)]):-neu(Alt, N2, Neu), N2 is N-1.
'])), error(id(post5b), penalty(0.8), poslist([pos(2, 0, 2, 'N')]), hint('N: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['neu(_, _, []).
', 'neu([], N , []).
', 'neu([[F|RST]|Alt], N, [[F|RST]|Neu]):-N2 is N-1, neu(Alt, N2, Neu).
', 'neu([_|Alt], N, [_| (Neu, F)]):-neu(Alt, N2, Neu), N2 is N-1.
']))], [ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok, ok], ['', '', '', '', '', '', '', '', '', '', '', '', ''], ''). test(exer8, 10, [declaration(sp, sender, [d('A1', +, list, 'GesamtListe'), d('A2', +, atom, 'Sender'), d('A3', -, list, 'Liste')])], [basecase, recursivecase, recursivecase], [map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg3', 3, -, list, ['Liste']), predicatedec(sp, sender, 3, sender/3, main, 'A3', 3, -, list, 'Liste')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg2', 2, +, atom, ['Sender']), predicatedec(sp, sender, 3, sender/3, main, 'A2', 2, +, atom, 'Sender')), map(dec, predicatedec(tp, tpsenderlist, 3, tpsenderlist/3, main, 'Arg1', 1, +, list, ['Gesamtliste']), predicatedec(sp, sender, 3, sender/3, main, 'A1', 1, +, list, 'GesamtListe'))], 'sender([], _,[]).\n sender([H|T], S, [H|X]):-H=[S,_,_], sender(T, S,X).\n sender([H|T], S,X):-H\\= [S, _,_], sender(T, S,X).\n', [error(id(s1a2), penalty(0.1), poslist([pos(3, 0, 1, ['H'|'T'])]), hint('An der Stelle von [H|T] sollte eine eingebette (De-)Komposition (z.B. [[X|H]|T]) stattfinden.'), highlighted(['sender([], _, []).
', 'sender([H|T], S, [H|X]):-H=[S, _, _], sender(T, S, X).
', 'sender( [H|T] , S, X):-H\\=[S, _, _], sender(T, S, X).
'])), error(id(s10c), penalty(0.5), poslist([pos(3, 1, 2, ['S', '_', '_'])]), hint('Ein Argument des Termtest-Subziels hat nicht die richtige Datenstruktur (Eine Datenstruktur ist entweder eine Liste, ein Atom, eine Zahl oder eine Variable, die beliebiges darstellen soll).'), highlighted(['sender([], _, []).
', 'sender([H|T], S, [H|X]):-H=[S, _, _], sender(T, S, X).
', 'sender([H|T], S, X):-H\\= [S, _, _] , sender(T, S, X).
'])), error(id(s4a), penalty(0.5), poslist([pos(3, 0, 1, ['H'|'T']), pos(3, 1, 1, 'H')]), hint('Die Unifikation zwischen [H|T] und H ist nicht erforderlich.'), highlighted(['sender([], _, []).
', 'sender([H|T], S, [H|X]):-H=[S, _, _], sender(T, S, X).
', 'sender( [H|T] , S, X):- H \\=[S, _, _], sender(T, S, X).
']))], [ok, ok, ok], ['nicht sofort ersichtlich', '', 'kein eindeutiger Hinweis'], ''). test(exer9, 1, [declaration(sp, rechnung_e, [d('A1', +, number, 'Kundennummer'), d('A2', +, number, 'Rechnungsnummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kunde']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(Kundennummer, Rechnungsnummer, Betrage, Datum):-rechnung(Rechnungsnummer, Kundennummer, Betrag, Datum), Betrage is Betrag/195*100.\n', [error(id(s6a2), penalty(0.5), poslist([pos(1, 2)]), hint('Der Multiplikand 100 in der Multiplikation von Betrag/195*100 ist überflüssig.'), highlighted(['rechnung_e(Kundennummer, Rechnungsnummer, Betrage, Datum):-rechnung(Rechnungsnummer, Kundennummer, Betrag, Datum), Betrage is Betrag/195*100 .
'])), error(id(s6d3), penalty(0.8), poslist([pos(1, 2, 2, 195)]), hint('Die Konstante 195 erfüllt nicht die Aufgabenstellung. Wir empfehlen: 1.95'), highlighted(['rechnung_e(Kundennummer, Rechnungsnummer, Betrage, Datum):-rechnung(Rechnungsnummer, Kundennummer, Betrag, Datum), Betrage is Betrag/195*100 .
']))], [ok, ok], ['', ''], korrekt). test(exer9, 2, [declaration(sp, rechnung_e, [d('A1', +, number, 'Kundennummer'), d('A2', +, number, 'Rechnungsnummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kunde']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(Knr, Rnr, B_ineuro, D):-B_ineuro is B_inDM*1.95, rechnung(Rnr, Knr, B_inDM, D).\n', [error(id(s6d), penalty(0.5), poslist([pos(1, 1, 2, 1.95)]), hint('An der Stelle von 1.95 wird eine Division erwartet.'), highlighted(['rechnung_e(Knr, Rnr, B_ineuro, D):-B_ineuro is B_inDM*1.95 , rechnung(Rnr, Knr, B_inDM, D).
'])), error(id(post7b), penalty(0.8), poslist([pos(1, 1, 2, 'B_inDM')]), hint('B_inDM muss gebunden sein, bevor das Kalkulationssubziel B_ineuro is B_inDM*1.95 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['rechnung_e(Knr, Rnr, B_ineuro, D):-B_ineuro is B_inDM*1.95 , rechnung(Rnr, Knr, B_inDM, D).
']))], [ok, ok], ['', ''], korrekt). test(exer9, 3, [declaration(sp, rechnung_e, [d('A1', +, number, 'Kundennummer'), d('A2', +, number, 'Rechnungsnummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kunde']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(Kundennummer, Rechnungsnummer, EBetrag, Datum):-rechnung(Rechnungsnummer, Kundennummer, Betrag, Datum), EBetrag is Betrag/1.95.\n', [], [], [], korrekt). test(exer9, 4, [declaration(sp, rechnung_e, [d('A1', +, number, 'Kundennummer'), d('A2', +, number, 'Rechnungsnummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kunde']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(KundNr, RechNr, Euro, Datum):-rechnung(RechNr, KundNr, Betrag,Datum), Betrag is Euro/1.95.\n', [error(id(s5a), penalty(0.1), poslist([pos(1, 0, 3, 'Euro')]), hint('Eine arithmetische Kalkulation für das Argument an der Stelle von Euro fehlt.'), highlighted(['rechnung_e(KundNr, RechNr, Euro , Datum):-rechnung(RechNr, KundNr, Betrag, Datum), Betrag is Euro/1.95.
'])), error(id(s6a3), penalty(0.5), poslist([pos(1, 2)]), hint('Entweder der Zähler Euro oder der Nenner 1.95 des Multiplikands Euro/1.95 ist überflüssig.'), highlighted(['rechnung_e(KundNr, RechNr, Euro, Datum):-rechnung(RechNr, KundNr, Betrag, Datum), Betrag is Euro/1.95 .
'])), error(id(s6e1), penalty(0.7), poslist([pos(1, 2, 2, 'Euro')]), hint('Die Variable Euro hat eine falsche Koreferenz. Sie sollte mit Betrag koreferieren.'), highlighted(['rechnung_e(KundNr, RechNr, Euro, Datum):-rechnung(RechNr, KundNr, Betrag, Datum), Betrag is Euro/1.95 .
'])), error(id(s4b1), penalty(0.3), poslist([pos(1, 2, 1, 'Betrag'), pos(1, 0, 3, 'Euro')]), hint('Das Ergebnis einer arithmetischen Kalkulation muss in den Klauselkopf zurückgebunden werden. Unifizere Betrag und Euro'), highlighted(['rechnung_e(KundNr, RechNr, Euro , Datum):-rechnung(RechNr, KundNr, Betrag, Datum), Betrag is Euro/1.95.
'])), error(id(post7b), penalty(0.8), poslist([pos(1, 2, 2, 'Euro')]), hint('Euro muss gebunden sein, bevor das Kalkulationssubziel Betrag is Euro/1.95 ausgeführt werden kann. Vielleicht liegt es daran, dass vorherige Subziele noch nicht erfolgreich durchgeführt werden können.'), highlighted(['rechnung_e(KundNr, RechNr, Euro, Datum):-rechnung(RechNr, KundNr, Betrag, Datum), Betrag is Euro/1.95 .
']))], [ok, ok, ok, ok, ok], ['', 'überflüssig - schlechte Wortwahl', '', '', ''], ''). test(exer9, 5, [declaration(sp, rechnung_e, [d('A1', +, number, 'Kundennummer'), d('A2', +, number, 'Rechnungsnummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kunde']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(Kundennummer, Rechnungsnummer, Betrag_e, Datum):-rechnung(Rechnungsnummer, Kundennummer, Betrag, Datum), Betrag_e is Betrag/1.95.\n', [], [], [], korrekt). test(exer9, 6, [declaration(sp, rechnung_e, [d('A1', +, number, 'Datum'), d('A2', -, number, 'Euro'), d('A3', +, number, 'Rechnungsnummer'), d('A4', +, number, 'Kundennummer')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Datum')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Euro']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Euro')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, +, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kundennummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Kundennummer'))], 'rechnung_e(Betrag, Euro, Rnr, Knr):-Zs is Betrag*195, Euro is Zs/100.\n', [error(id(s5b), penalty(0.1), poslist([pos(1, 1)]), hint('Zs is Betrag*195 : Diese arithmetische Kalkulation ist überflüssig.'), highlighted(['rechnung_e(Betrag, Euro, Rnr, Knr):- Zs is Betrag*195 , Euro is Zs/100.
'])), error(id(s6a3), penalty(0.5), poslist([pos(1, 2)]), hint('Entweder der Zähler Zs oder der Nenner 100 des Multiplikands Zs/100 ist überflüssig.'), highlighted(['rechnung_e(Betrag, Euro, Rnr, Knr):-Zs is Betrag*195, Euro is Zs/100 .
'])), error(id(s6d3), penalty(0.8), poslist([pos(1, 2, 2, 100)]), hint('Die Konstante 100 erfüllt nicht die Aufgabenstellung. Wir empfehlen: 1.95'), highlighted(['rechnung_e(Betrag, Euro, Rnr, Knr):-Zs is Betrag*195, Euro is Zs/100 .
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 3, 'Rnr')]), hint('Rnr: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['rechnung_e(Betrag, Euro, Rnr , Knr):-Zs is Betrag*195, Euro is Zs/100.
'])), error(id(post5b), penalty(0.8), poslist([pos(1, 0, 4, 'Knr')]), hint('Knr: Diese Variable existiert im Klauselkopf, wird aber nicht benutzt. Ist sie überflüssig? Haben Sie ein Subziel vergessen? Oder soll die Variable anonym sein?'), highlighted(['rechnung_e(Betrag, Euro, Rnr, Knr ):-Zs is Betrag*195, Euro is Zs/100.
']))], [ok, ok, ok, ok, ok], ['', '', '', '', ''], korrekt). test(exer9, 7, [declaration(sp, rechnung_e, [d('A1', +, number, 'Rechnungsnummer'), d('A2', +, number, 'Kundennummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kundennummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(Rechnungsnummer, Kundennummer, BetragEuro, Datum):-rechnung(Rechnungsnummer, Kundennummer, Betrag, Datum), BetragEuro is Betrag/1.95.\n', [], [], [], korrekt). test(exer9, 8, [declaration(sp, rechnung_e, [d('A1', +, number, 'Rechnungsnummer'), d('A2', +, number, 'Kundennummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kundennummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(R,K,B,D):-rechnung(R,K,B,D), B is B*1.95.\n', [error(id(s6d), penalty(0.5), poslist([pos(1, 2, 2, 1.95)]), hint('An der Stelle von 1.95 wird eine Division erwartet.'), highlighted(['rechnung_e(R, K, B, D):-rechnung(R, K, B, D), B is B*1.95 .
'])), error(id(s4a1), penalty(0.5), poslist([pos(1, 0, 3, 'B'), pos(1, 1, 3, 'B')]), hint('Die Koreferenz zwischen diesen Argumentstellen ist nicht erforderlich.'), highlighted(['rechnung_e(R, K, B , D):-rechnung(R, K, B , D), B is B*1.95.
']))], [ok, ok], ['', ''], korrekt). test(exer9, 9, [declaration(sp, rechnung_e, [d('A1', +, number, 'Rechnungsnummer'), d('A2', +, number, 'Kundennummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kundennummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(Rechnungsnummer, Kundennummer, Betrag_e, Datum):-rechnung(Kundennummer, Kundennummer, Betrag, Datum), Betrag_e = Betrag/1,95.\n', [error(id(g7), penalty(0.5), poslist([pos(1, 3)]), hint('95/0: Dieses Subziel ist unbekannt.'), highlighted(['rechnung_e(Rechnungsnummer, Kundennummer, Betrag_e, Datum):-rechnung(Kundennummer, Kundennummer, Betrag, Datum), Betrag_e=Betrag/1, 95 .
']))], [nok], ['Tippfehler - Leerzeichen zuviel!'], ''). test(exer9, 10, [declaration(sp, rechnung_e, [d('A1', +, number, 'Rechnungsnummer'), d('A2', +, number, 'Kundennummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kundennummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(RechnungsNr, KundenNr, Betrag/1.95, Datum):-rechnung(RechnungsNr, KundenNr, Betrag, Datum).\n', [error(id(pre2e), penalty(0.3), poslist([pos(1, 0, 3, 'Betrag'/1.95)]), hint('Der Typ von Betrag/1.95 stimmt nicht mit der Deklaration überein. Es sollte eine Zahl sein.'), highlighted(['rechnung_e(RechnungsNr, KundenNr, Betrag/1.95 , Datum):-rechnung(RechnungsNr, KundenNr, Betrag, Datum).
']))], [ok], [''], korrekt). test(exer9, 11, [declaration(sp, rechnung_e, [d('A1', +, number, 'Rechnungsnummer'), d('A2', +, number, 'Kundennummer'), d('A3', -, number, 'Betrag'), d('A4', +, number, 'Datum')])], [nonrecursive], [map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg1', 1, +, number, ['Kundennummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A2', 2, -, number, 'Rechnungsnummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg2', 2, +, number, ['Rechnungsnummer']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A1', 1, +, number, 'Kundennummer')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg3', 3, -, number, ['Betrag']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A3', 3, -, number, 'Betrag')), map(dec, predicatedec(tp, tprechnung_e, 4, tprechnung_e/4, main, 'Arg4', 4, +, number, ['Datum']), predicatedec(sp, rechnung_e, 4, rechnung_e/4, main, 'A4', 4, +, number, 'Datum'))], 'rechnung_e(RNr, KNr, BetragE, Datum):-rechnung(RNr, KNr, BetragDM, Datum), BetragE is BetragDM*100/1.95.\n', [error(id(s6a2), penalty(0.5), poslist([pos(1, 2)]), hint('Der Multiplikand 100 in der Multiplikation von 100*BetragDM/1.95 ist überflüssig.'), highlighted(['rechnung_e(RNr, KNr, BetragE, Datum):-rechnung(RNr, KNr, BetragDM, Datum), BetragE is BetragDM*100/1.95 .
']))], [ok], [''], korrekt).