Enunciado distribuído na sala.
Abaixo as perguntas Prolog e, em azul ou vermelho, as respostas do sistema, com justificativa para as falsas.
?- X = Meio_de_transporte, [X,X,X] = [aviao,trem,barco].falseA variávelXnão pode ser igual às constantesaviao,tremebarcosimultaneamente.
?- f(X, a(b,Y)) = f(Z, a(Z,c)).X = b, Y = c, Z = bEsta deu certo.
?- M = 1, N = 1 + M.M = 1, N = 1 + 1Esta deu certo. Note que a operação '+' não é realizada, pois temos '=' e não is.
?- N = 1, N is N + 1.falseA variávelNtem valor 1 após a primeira meta ser satisfeita, e o valor 1 não é igual ao valor da expressãoN + 1calculado pelo operadoris, que é 2.
?- N = 1, N is M + 1.ERRORA expressãoM + 1não pode ser calculada pelo operadoris, pois a variávelMnão tem valor no momento do cálculo, causando erro.
conta(_,[],0).
conta(A,[A|R],N) :-
conta(A,R,N1),
N is N1 + 1.
conta(A,[B|R],N) :-
B \= A,
conta(A,R,N).
intercala(X,Y,Z) :-
sorted(X),
sorted(Y),
intercaux(X,Y,Z).
sorted([]).
sorted([_]).
sorted([A|[B|R]]) :-
A =< B, sorted([B|R]).
intercaux([],A,A) :- !.
intercaux(A,[],A).
intercaux([A|B],[C|D],[A|R]) :-
A =< C,
intercaux(B,[C|D],R).
intercaux([A|B],[C|D],[C|R]) :-
A > C,
intercaux([A|B],D,R).
compostos(N,L) :- compaux([], 2, [], N, L).
compaux(_, T, C, N, C) :-
T > N.
compaux(P, T, C, N, R) :-
T =< N,
divide(P, T), !,
T1 is T + 1,
compaux(P, T1, [T|C], N, R).
compaux(P, T, C, N, R) :-
T =< N,
T1 is T + 1,
compaux([T|P], T1, C, N, R).
divide([A|_], T) :- 0 is T mod A, !.
divide([_|R], T) :- divide(R, T).
Exceto pela Questão 1, que não envolvia escrever código Prolog, o critério de correção começou por decidir como seria a pontuação: de cima para baixo ou de baixo para cima. Se a resposta estava bem escrita, com sintaxe Prolog correta, resolução do problema pedido (e não de outro) e com comprimento proporcional à complexidade da questão, então a correção procedeu de cima para baixo, ou seja, parte-se do valor integral e vão sendo subtraidas frações de pontos para cada defeito encontrado.
Por outro lado, se a resposta estava mal escrita, com sintaxe errada, resolvendo o problema errado ou incompleta, então a correção procedeu de baixo para cima: parte-se de zero e vão sendo adicionadas frações de pontos a cada indício de conhecimento importante encontrado. Embora em geral a correção de cima para baixo resulte em notas maiores numa questão, é possível ter exceções a esta tendência.
Nas questões de escrita de código Prolog, os seguintes critérios foram universalmente aplicados:
is para argumentos não-numéricos: -0,2primo num lugar e is_primo em outro): perdoado se estava claro a que se referiam os nomesN > 3, ou só para inteiros, etc.): perdoado se funcionava para suficientes valoresappend: perdoadoA seguir, critérios específicos para cada questão. Nas questões de código, são todos critérios de cima para baixo.
Cada item valeu 0,5. Em geral, cada resposta foi classificada como correta (0,5), semi-correta (0,3 ou 0,2), ou errada (0,0). Duas respostas semi-corretas equivaleram a uma correta (0,5).
/+ em lugar de \+: perdoado© 2013 João Meidanis