Я работаю через свой учебник по искусству, который я получил, и я пришел к последней проблеме домашних заданий для моего раздела:
"Внедрите алгоритм унификации, описанный на стр. 69 на любом выбранном вами языке".
На стр. 69 у вас есть следующий псевдокод для алгоритма унификации:
function unify(E1, E2);
begin
case
both E1 and E2 are constants or the empty list:
if E1 = E2 then return {}
else return FAIL;
E1 is a variable:
if E1 occurs in E2 then return FAIL
else return {E2/E1}
E2 is a variable
if E2 occurs in E1 then FAIL
else return {E1/E2}
either E1 or E2 are empty then return FAIL
otherwise:
begin
HE1 := first element of E1;
HE2 := first element of E2;
SUBS1 := unify(HE1, HE2);
if SUBS1 := FAIL then return FAIL;
TE1 := apply(SUBS1, rest of E1);
TE2 := apply(SUBS1, rest of E2);
SUBS2 := unify(TE1, TE2);
if SUBS2 = FAIL then return FAIL;
else return composition(SUBS1, SUBS2)
end
end
end
Теперь я понимаю общую концепцию унификации, но я совершенно не знаю, как я даже начну ее реализовывать на языке Java или С#.
Я даже не знаю, как будет выглядеть подпись метода. Какие переменные могли бы потребоваться? Я совершенно уверен, что мне нужно возвращать списки для представления предикатных вычислений, но это предположение.
Например, когда он говорит: "E1 - это переменная", ну, если я передаю его в метод Unify, как это может быть ничего? Я могу проверить значение null, но это будет отличаться от "пустого списка"?
Может ли кто-нибудь помочь мне или указать мне в правильном направлении для реализации алгоритма Unificaiton на С# или Java?