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?