estoy trabajando a través de mi libro de texto de AI llegué y he llegado al último problema de tarea para mi sección:¿Cómo puedo implementar el algoritmo de unificación en un lenguaje como Java o C#?
"Implementar el algoritmo de unificación se indica en la página 69 en cualquier idioma de su elección."
En la página 69, tiene las siguientes pseudo-código para el algoritmo de unificación:
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
Ahora, entiendo el concepto general de la unificación, pero no tengo ni idea de cómo iba a empezar a poner en práctica esta en un lenguaje como Java o C#.
Ni siquiera estoy seguro de cómo se vería la firma del método. ¿Qué tipo de variables tomaría? Estoy bastante seguro de que necesito devolver listas para representar construcciones de cálculo de predicados, pero eso es una suposición.
Por ejemplo, cuando dice "E1 es una variable", bueno, si lo paso al método Unify, ¿cómo podría ser algo más que eso? Podría verificar nulo pero ¿sería diferente a la "lista vacía"?
¿Alguien me puede ayudar o señalarme en la dirección correcta para implementar el algoritmo de Unificaiton en C# o Java?
Si tengo algo así como cláusula 1. sabe (Juan, x) cláusula 2. sabe (Juan, María) que funciona, sino que también funcionaría con algo así como la cláusula 1. sabe (Juan, x) cláusula 2. odia (juan, mary) pero no debería funcionar para este último porque el nombre del predicado sabe y odia son diferentes. por lo que este código necesita un poco de adaptación – conterio