C#으로 작성된 학생 프로그램을 이해할 수있는 프롤로그 코드를 작성하려고했습니다. 이제 나는 학생 프로그램에서 'if'문을 인식하는 과정에 갇혀있다. 예 : 다음은 학생이 기대하는 코드입니다.Prolog에서 조건부 계획의 종류를 쓰는 방법은 무엇입니까?
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]
문제는 내가, 프롤로그 사실과 규칙 위의 수험 번호를 나타낼 수 목표에 대한 만족 것을 찾는 방법입니다 가능한 모든 조건.
나는 학생 코드의 첫 부분을 다음과 같은 사실이되도록 변경하려고했지만 실제로 프롤로그에서 사실/규칙으로 학생의 'if'진술문을 표현하는 방법을 알지 못했다. 바로, '경우'프롤로그로 변경?)
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)
그리고 또 하나, 내 목표에, 나는 내가 연산자보다 프롤로그 이상 사용할 수 없습니다 생각하지, 어느 쪽도 Vd> 0
이나 원인이 Vd @> 0
등 gt(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;
그러나 다시,이 코드는 목표를 달성하기 위해 액션/규칙/사실로 프롤로그에 표현 될 수있는 방법을 도움/아이디어가 필요합니다.
정말 도움이됩니다.
많은 감사
CLP 재미있다. 그러나 나는 초심자가 ** 정말로 ** 그것을 이해할 수있는 힘든 시간을 가질 수 있다고 생각한다. – CapelliC
내 의견이 아닙니다 : Budi Hartanto가 초보자인지 또는 CLP (*)가 특히 어려운 통계 데이터를 가지고 있는지 여부도 알지 못합니다. CLP (*)는 더 선언적이어야하므로 더 간단해야합니다. –
일부 CLP가없는 경우 (*)별로 확인할 수 없습니다. int d = int.Parse (Console.ReadLine()); 데이터는 임의적 일 수 있으며, 표준 Prolog 철저한 검색은 실제로 쿼리에 응답하지 않습니다. CLP (*)와 같이 더 상징적 인 것이 필요합니다. –