Jak zaimplementować algorytm unifikacji w języku takim jak Java lub C #?

Pracuję nad moim podręcznikiem AI, który dostałem i doszedłem do ostatniego problemu z pracą domową w mojej sekcji:

„Zaimplementuj algorytm ujednolicenia opisany na stronie 69 w dowolnym wybranym języku”.

Na stronie 69 masz następujący pseudo kod dla algorytmu unifikacji:

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

Teraz rozumiem ogólną koncepcję unifikacji, ale absolutnie nie mam pojęcia, w jaki sposób zacznę ją implementować w języku takim jak Java lub C #.

Nie jestem nawet pewien, jak będzie wyglądał podpis metody. Jakiego rodzaju zmienne by to wymagało? Jestem dość pewny, że muszę zwrócić listy, aby reprezentowały konstrukcje rachunku predykatów, ale to jest zgadywanie.

Na przykład, gdy mówi „E1 jest zmienną”, cóż, jeśli przekazuję ją do metody Unify, jak to może być coś innego niż? Mogę sprawdzić, czy wartość null jest inna, ale czy będzie inna niż „pusta lista”?

Czy ktoś może mi pomóc lub wskazać mi właściwy kierunek wdrażania algorytmu Unificaiton w języku C # lub Java?

questionAnswers(4)

yourAnswerToTheQuestion