Как написать вид условного планирования в прологе?
Я попытался написать код пролога, который может понять программу студента, написанную на C #. Теперь я застрял в процессе распознавания утверждения «если» в студенческой программе. Например: ниже приведен код, который я ожидаю от студента.
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;
Я определил цель этого ожидаемого кода как:
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]
Проблема заключается в том, как я могу представить вышеуказанный код студента в прологе фактов и правил, чтобы выяснить, что цель удовлетворяется при любых возможных условиях.
Я пытался изменить первую часть кода студента, чтобы она стала похожа на факты, подобные приведенным ниже, но я не знаю, как представить утверждение студента «если» как факты / правила в прологе (я думаю, я не должен менять его на пролог «если», верно?)
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)
И еще один, в моей цели, когда у меня есть сравнение, такое какgt(Vd,0)
Я думаю, что я не могу использовать пролог больше, чем оператор, ниVd> 0
ниVd @> 0
причиной того, что значение в Vd на самом деле является определенным значением, введенным пользователем, но оно представляется как символическое значение (в данном случае это:val_d
).
Примечание: используя вышеуказанную цель, я думаю, что определенная цель будет достигнута, если код студента будет изменен на следующий код.
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;
или же
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;
Но опять же, мне нужна помощь / идея, как этот код может быть представлен в прологе как действие / правило / факт для достижения цели.
Любая помощь очень ценится.
Большое спасибо