From: <ki...@cs...> - 2002-02-26 21:32:16
|
Terry wrote: > > Actually, Michael, you do know that the order of inserts is arbitrary > within a trie? In other words if your order of insertions is > p(a),p(b),p(c), their order in the trie may be p(c),p(a),p(b) (or any > other order). This is a characteristic of our implementation of tries. > If you want the clauses to be in the order you inserted them, you > *have* to use vanilla assert and retract. I agree that XSB shouldn't > hang with tries, but before I spend a lot of time trying to fix the > tries, I want to make sure that you will be able to use the result. > It might be better to try to adapt assert and retract to be > backtrackable. Yes, I know that. We use tries to store facts, and the assumption is that the order doesn't matter. In principle, adapting the regular assert to make it backtrackable could simplify things in Flora. However, it is more than that. Tries provide a convenient mechanism to physically separate various storages, which can be manipulated separately. Also, using trie_intern/trie_interned is faster than going through the regular assert/retract. There is a lot of Prolog code around assert/retract, which isn't needed when you are working with facts only. On the other hand, the regular assert has the advantage that you can have multiple indices on different arguments. This is hard to do with tries. What was the reason for switching to trie assert by the way? But in any case, I think it is a good idea to do for assert retract what Prasad did for interned tries. Even if garbage collection is not automatic, giving the programmer the tool to do it on demand is sufficient for 96.3% of the cases. (PS: your mileage may vary :-) --michael |