Wie schreibt man eine Art bedingte Planung in Prolog?

Ich habe versucht, einen Prologcode zu schreiben, der das in C # geschriebene Studentenprogramm versteht. Jetzt bin ich festgefahren, die "Wenn" -Anweisung im Studentenprogramm zu erkennen. Zum Beispiel: Das Folgende ist der Code, den ich vom Schüler erwarte.

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;

Ich habe das Ziel dieses erwarteten Codes wie folgt definiert:

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]

Das Problem ist, wie ich den obigen Studentencode in Fakten und Regeln des Prologs darstellen kann, um herauszufinden, dass das Ziel für alle möglichen Bedingungen erfüllt ist.

Ich habe versucht, den ersten Teil des Studentencodes in Fakten wie den folgenden zu ändern, weiß aber nicht genau, wie ich die 'if'-Anweisung des Studenten als Fakten / Regeln in Prolog darstellen soll (ich denke, ich sollte sie nicht in Prolog ändern) "Wenn", richtig?)

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)

Und noch eine, in meinem Ziel, wenn ich Vergleiche wiegt(Vd,0) Ich glaube, ich kann den Prolog auch nicht größer als operator verwendenVd> 0 NochVd @> 0 weil der Wert in Vd tatsächlich ein bestimmter vom Benutzer eingegebener Wert ist, aber als symbolischer Wert dargestellt wird (in diesem Fall ist es:val_d).

Hinweis: Wenn Sie das oben genannte Ziel verwenden, wird das festgelegte Ziel meiner Meinung nach erreicht, wenn der Studentencode in den folgenden Code geändert wird.

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;

oder

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;

Aber auch hier brauche ich Hilfe / Idee, wie dieser Code im Prolog als Aktion / Regel / Fakt dargestellt werden kann, um das Ziel zu erreichen.

Jede Hilfe wird sehr geschätzt.

Danke vielmals

Antworten auf die Frage(2)

Ihre Antwort auf die Frage