Jak napisać rodzaj warunkowego planowania w Prologu?

Próbowałem napisać kod prologu, który może zrozumieć program ucznia napisany w C #. Teraz utknąłem w procesie rozpoznawania stwierdzenia „jeśli” w programie ucznia. Na przykład: Oto kod, którego oczekuję od ucznia.

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;

Cel tego spodziewanego kodu zdefiniowałem jako:

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]

Problem polega na tym, jak mogę przedstawić powyższy kod studenta w faktach i regułach prologu, aby dowiedzieć się, że cel jest spełniony dla wszelkich możliwych warunków.

Próbowałem zmienić pierwszą część kodu ucznia, aby stać się faktami takimi jak poniżej, ale tak naprawdę nie wiem, jak reprezentować stwierdzenie „jeśli” ucznia jako fakty / zasady w prologu (chyba nie powinienem go zmieniać na prolog „jeśli”, prawda?

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)

I jeszcze jeden, w moim celu, kiedy mam porównanie takie jakgt(Vd,0) Myślę, że nie mogę używać prologu więcej niż operatoraVd> 0 aniVd @> 0 ponieważ wartość w Vd jest w rzeczywistości pewną wartością wprowadzoną przez użytkownika, ale jest reprezentowana jako wartość symboliczna (w tym przypadku jest to:val_d).

Uwaga: używając powyższego celu, myślę, że zdefiniowany cel będzie spełniony, jeśli kod ucznia zostanie zmieniony na następujący kod.

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;

lub

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;

Ale znowu potrzebuję pomocy / pomysłu, jak ten kod może być reprezentowany w prologu jako akcja / reguła / fakt, aby osiągnąć cel.

Każda pomoc jest na prawdę doceniana.

Wielkie dzięki

questionAnswers(2)

yourAnswerToTheQuestion