Como posso implementar o algoritmo de unificação em uma linguagem como Java ou C #?
Estou trabalhando no meu livro de AI que recebi e cheguei ao último problema de lição de casa da minha seção:
"Implementar o Algoritmo de Unificação descrito na página 69 em qualquer idioma de sua escolha."
Na página 69, você tem o seguinte pseudo-código para o algoritmo de unificação:
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
Agora, eu entendo o conceito geral de unificação, mas não tenho absolutamente nenhuma idéia de como eu começaria a implementar isso em uma linguagem como Java ou C #.
Eu nem tenho certeza de como seria a assinatura do método. Que tipo de variáveis seriam necessárias? Tenho certeza de que preciso retornar listas para representar construções de cálculo de predicados, mas isso é um palpite.
Por exemplo, quando diz "E1 é uma variável", bem, se estou passando para o método Unify, como poderia ser qualquer coisa, menos? Eu poderia verificar por null, mas isso seria diferente de "lista vazia"?
Alguém pode me ajudar ou me apontar na direção certa para implementar o algoritmo Unificaiton em C # ou Java?