Tôi đang làm việc thông qua sách giáo khoa AI của mình mà tôi nhận được và tôi đã gặp vấn đề bài tập về nhà cuối cùng cho phần của mình:Làm cách nào để triển khai thuật toán hợp nhất bằng ngôn ngữ như Java hoặc C#?
"Thực hiện Thuật toán thống nhất được nêu ở trang 69 bằng ngôn ngữ bạn chọn."
Trên trang 69, bạn đã pseudo-code sau cho các thuật toán thống nhất:
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
Bây giờ, tôi hiểu được những khái niệm chung của thống nhất đất nước nhưng tôi hoàn toàn không có ý tưởng làm thế nào tôi thậm chí sẽ bắt đầu thực hiện điều này bằng ngôn ngữ như Java hoặc C#.
Tôi thậm chí không chắc chắn chữ ký của phương thức sẽ trông như thế nào. Loại biến nào sẽ mất? Tôi khá chắc chắn tôi cần phải trả lại danh sách để đại diện cho cấu trúc tính toán vị ngữ nhưng đó là một đoán.
Ví dụ, khi nó nói "E1 là một biến", tốt, nếu tôi chuyển nó vào phương pháp hợp nhất, làm thế nào nó có thể là bất cứ điều gì nhưng? Tôi có thể kiểm tra null nhưng điều đó sẽ khác với "danh sách trống"?
Bất cứ ai có thể giúp tôi hoặc chỉ cho tôi đúng hướng để triển khai thuật toán Unificaiton trong C# hoặc Java?
Nếu tôi có một cái gì đó giống như khoản 1. biết (john, x) khoản 2. biết (john, mary) nó hoạt động, nhưng nó cũng sẽ làm việc với một cái gì đó giống như khoản 1. biết (john, x) Điều khoản 2. ghét (john, mary) nhưng không nên hoạt động sau này vì tên vị ngữ biết và ghét khác nhau. vì vậy mã này cần một số may – conterio