我正在阅读一本人工智能教材,现在来到了这节课最后一个作业题:
"用你所选的任何编程语言实现第69页中描述的统一算法。"
在第69页,你可以看到统一算法的伪代码如下:
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
我理解统一的一般概念,但我完全不知道如何在像Java或C#这样的语言中开始实现它。
我甚至不确定方法签名会是什么样子。它需要哪些类型的变量?我相当确定我需要返回列表来表示谓词演算结构,但这只是一个猜测。
例如,当它说“E1是一个变量”时,如果我将其传递到Unify方法中,除了变量它还能是什么?我可以检查空值但与“空列表”有什么不同吗?
有人能帮助我或指点我在C#或Java中实现统一算法的正确方向吗?