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?

questionAnswers(4)

yourAnswerToTheQuestion