Sự hiểu biết của tôi về sự hợp nhất là một chút ít. Tôi hiểu sự thống nhất cơ bản, nhưng tôi đang gặp vấn đề với các thuật ngữ vòng đầu của tôi mà không phải là không thể xác định.Prolog: Là f (X) = X unifiable hay không?
Tôi đã xem hướng dẫn về thống nhất trên youtube nêu rõ một biến đang cố gắng thống nhất với cụm từ chứa biến đó, sau đó nó không phải là không thể xác định.
Tuy nhiên khi tôi gõ ?- f(X) = X
vào prolog, nó sẽ trả về một cái gì đó dọc theo dòng của ... f(f(f(f(f(f(...)))))) ?
Tôi hiểu tại sao điều này là ... nhưng tôi không hiểu nếu điều này có nghĩa là nó là unifiable hay không, như tôi đã mong đợi nó chỉ để trả lại 'không' nếu nó không phải là không thể nhận ra. Tôi có nghĩ rằng cố gắng thống nhất f (X) = X thất bại trong việc kiểm tra xảy ra, do đó làm cho chúng không thể xác định được?
Để có điều gì đó * không thể nhận dạng * nó phải như vậy * với * cái gì khác. Vì vậy, khi bạn là * Là 'f (X) = X' unifiable? * Bạn có thực sự có nghĩa là, * Là' f (X) 'unifiable với' X'? * Bằng cách này, mà Prolog thực hiện bạn đang sử dụng? Các Prolog khác nhau phản ứng khác với 'f (X) = X'. – lurker
Nếu bạn đọc, ví dụ: [tại đây] (http://www.swi-prolog.org/pldoc/man?predicate=unify_with_occurs_check%2f2) và [tại đây] (http://www.swi-prolog.org/pldoc/man? section = flags # flag: happen_check), bạn sẽ thấy câu trả lời là: * nó phụ thuộc *. Nó phụ thuộc vào việc Prolog của bạn có thực hiện kiểm tra hay không, hoặc hỗ trợ nó như là một lựa chọn.Theo tài liệu SWI, với một truy vấn như 'f (X) = X', *** hợp nhất thành công **, tạo một cây vô hạn * nếu' occurr_check' được đặt thành false. Nếu 'happen_check' được đặt thành true, thì việc hợp nhất sẽ thất bại. – lurker
@lurker Tôi đang sử dụng Prolog cụ thể, nhưng tôi đang nói nhiều hơn trong logic tổng quát. Tôi cho rằng Prolog sẽ giống nhau. – Wolff