Tại sao điều này không hoạt động để xác định "đã kết hôn" trong Prolog?Làm thế nào tôi có thể sửa vị từ tròn này trong Prolog?
married(X,Y):-married(Y,X).
Các loại thuộc tính hình tròn này có được phép không? Tôi sẽ sửa nó như thế nào?
Cảm ơn
Tại sao điều này không hoạt động để xác định "đã kết hôn" trong Prolog?Làm thế nào tôi có thể sửa vị từ tròn này trong Prolog?
married(X,Y):-married(Y,X).
Các loại thuộc tính hình tròn này có được phép không? Tôi sẽ sửa nó như thế nào?
Cảm ơn
Tha thứ cho tôi nếu tôi nhận được sai cú pháp, đã lâu kể từ khi tôi chơi với Prolog.
Một giải pháp điển hình là giới thiệu một tầm cao mới để các điều khoản, như thế này:
married(X, Y) :- wife(X, Y).
married(X, Y) :- wife(Y, X).
và sau đó xác định các mối quan hệ sử dụng mệnh đề vợ thay vì:
wife(jane, bob).
wife(alice, john).
?- married(jane, X).
X = bob
Thông tin thêm có thể được tìm thấy ở đây: CSc 8710, Deductive Databases and Logic Programming, chapter 6 - Logic and databases, dưới 6,5 - Quan hệ đặc biệt.
Như tôi đã hiểu, vấn đề cơ bản là nếu định nghĩa vòng tròn được cho phép, mặc dù ngôn ngữ kết quả là tự nhất quán, có thể có những hậu quả tinh vi thường phản trực giác. Ngoài ra còn có những cân nhắc về hiệu quả (định nghĩa hình tròn phải trả thêm chi phí).
Xem điều này detailed discussion để biết thêm nhiều giải thích và một số điểm khác nhau.
Một giải pháp có thể là sử dụng tabling, xem ví dụ: this answer.