Como escrever um tipo de planejamento condicional no Prolog?
Eu tentei escrever um código de prólogo que pode entender o programa do aluno escrito em c #. Agora estou preso no processo de reconhecer a declaração 'se' no programa do aluno. Por exemplo: O seguinte é o código que eu espero do aluno.
int d = int.Parse(Console.ReadLine()); // value d is inputted by user
int s = 0;
if (d>0)
s = 2;
else if (d==0)
s = 1;
else
s = 0;
Eu defini o objetivo desse código esperado como:
goal:-
hasVarName(Vid_s, s),
hasVarName(Vid_d, d),
hasVarValue(Vid_d, Vd),
((not(gt(Vd,0)); hasVarValue(Vid_s, 2)), %eq: [Vd>0] -> [val_s = 2]
((gt(Vd,0); not(eq(Vd,0)); hasVarValue(Vid_s, 1)), %eq: [~(Vd>0)^(Vd=0)] -> [val_s = 1]
((gt(Vd,0); eq(Vd,0); hasVarValue(Vid_s, 0). %eq: [~(Vd>0)^~(Vd=0)] -> [val_s = 0]
O problema é como posso representar o código do aluno acima em fatos e regras do prólogo, para descobrir que o objetivo é satisfeito para quaisquer condições possíveis.
Eu tentei mudar a primeira parte do código do estudante para tornar-se fatos como o seguinte, mas realmente não sei como representar a instrução 'if' do aluno como fatos / regras no prólogo (eu acho, eu não deveria alterá-lo para o prólogo 'se', certo?)
hasVarName(varID_d, d)
hasVarValue(varID_d, val_d) %it is unknown, so I represent it as symbol 'val_d'
hasVarName(varID_s, s)
hasVarValue(varID_s, 0)
E outro, no meu objetivo, quando tenho comparação comogt(Vd,0)
Eu acho que não posso usar o prólogo maior que o operador, nemVd> 0
nemVd @> 0
Porque o valor em Vd é realmente um determinado valor digitado pelo usuário, mas é representado como valor simbólico (neste caso é:val_d
).
Nota: usando o objetivo acima, acho que o objetivo definido será satisfeito se o código do aluno for alterado para o código a seguir.
int d = int.Parse(Console.ReadLine()); // value d is inputted by user
int s = 0;
if (d>0)
s = 2;
else if (d==0)
s = 1;
ou
int d = int.Parse(Console.ReadLine()); // value d is inputted by user
int s = 10; // any random initialization
if (d>0)
{
int x = 2; // unnecessary step, but still Ok.
s = x;
}
else if (d==0)
s = 1;
else
s = 0;
Mas, novamente, preciso de ajuda / ideia de como esse código pode ser representado no prólogo como ação / regra / fato para atingir o objetivo.
Qualquer ajuda é muito apreciada.
Muito Obrigado