Tôi muốn có thể tìm kiếm sự tồn tại của một thuật ngữ nhanh nhất có thể trong chương trình prolog hiện tại của mình, mà không có công cụ prolog đi qua tất cả các điều khoản cho đến khi nó đạt đến thuật ngữ hiện tại.O (1) hạn tra
tôi đã không tìm thấy bất kỳ bằng chứng về nó .. nhưng tôi cho rằng cho
animal(lion).
animal(zebra).
...
% thousands of other animals
...
animal(tiger).
Động cơ SWI-Prolog sẽ phải đi qua hàng ngàn loài động vật cố gắng để thống nhất với hổ để xác nhận động vật (tiger) có trong cơ sở dữ liệu prolog của tôi.
Trong các ngôn ngữ khác, tôi tin rằng một HashSet sẽ giải quyết vấn đề này, cho phép tra cứu O (1) ... Tuy nhiên tôi dường như không tìm thấy bất kỳ hashsets hoặc hashtables nào trong tài liệu swi-prolog.
Có thư viện swi-prolog cho hashsets hay tôi có thể tự xây dựng nó bằng cách sử dụng term_hash \ 2?
thông tin thưởng, tôi sẽ hầu như phải làm nhìn lên trên một số dữ liệu tự động thêm vào, hoặc là thêm vào một HashSet cấu trúc dữ liệu hoặc sử dụng assertz
Mặc dù vậy, bạn có thể lo lắng. "động vật (hổ)" là trong O (1), nhưng "động vật (X), X = hổ" là trong O (n). – repeat