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

questionAnswers(2)

yourAnswerToTheQuestion