Ich möchte die Existenz eines Begriffes so schnell wie möglich in meinem aktuellen Prolog-Programm nachschlagen können, ohne dass die Prolog-Engine alle Begriffe durchläuft, bis sie schließlich den bestehenden Begriff erreicht.O (1) term look up
Ich habe keinen Beweis dafür gefunden .. aber ich nehme an, dass
animal(lion).
animal(zebra).
...
% thousands of other animals
...
animal(tiger).
Der swi-prolog Motor, um mit Tigern zu vereinen versuchen, durch Tausende von Tieren gehen müssen gegeben, dass Tier zu bestätigen (Tiger) ist in meiner Prolog-Datenbank.
In anderen Sprachen glaube ich, dass ein HashSet dieses Problem lösen würde, was ein O (1) Lookup ermöglicht ... Jedoch kann ich keine Hashsets oder Hashtables in der swi-prolog Dokumentation finden.
Gibt es eine Swi-Prolog-Bibliothek für Hashsets, oder kann ich sie irgendwie selbst mit term_hash \ 2 erstellen?
Bonus Info, werde ich höchstwahrscheinlich müssen die auf einigen dynamisch hinzugefügt Daten sehen tun, entweder zu einer Hashset Datenstruktur oder mit assertz
Sie können jedoch einige Vorbehalte beachten. "Tier (Tiger)" ist in O (1), aber "Tier (X), X = Tiger" ist in O (n). – repeat