Path: ...!news.roellig-ltd.de!open-news-network.org!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock Newsgroups: comp.lang.prolog Subject: Re: PIPs from the Basilisk Chamber (Was: 50 Years of Prolog Nonsense) Date: Sat, 9 Nov 2024 15:47:59 +0100 Message-ID: References: <5b00dab0-832f-4fbe-b319-3d459d856e53n@googlegroups.com> <1acaa5f3-171d-4417-bd41-32a9578db900n@googlegroups.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sat, 9 Nov 2024 14:47:58 -0000 (UTC) Injection-Info: solani.org; logging-data="429404"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 SeaMonkey/2.53.19 Cancel-Lock: sha1:f308wDGGjbmLHteGudIwnnExQGg= In-Reply-To: X-User-ID: eJwFwYEBwDAEBMCVyj9iHBH2H6F3BhfvoJvT1nZRU6Irh0cf8wK9CYz2XDsflTbPJHY8I7bz8QuyXAsX8QNVbhU9 Bytes: 2252 Lines: 35 I can speed it up, if I use nb_setarg/3 instead of the explicit duplicate_term/2 and nb_linkarg/3 combo. The change is as follows: /* Before */ sys_find2_next(T, X) :- C = [_|_], duplicate_term(T, H), nb_linkarg(1, C, H), arg(1, X, J), nb_linkarg(2, J, C), nb_linkarg(1, X, C) /* After */ sys_find2_next(T, X) :- C = [_|_], nb_setarg(1, C, T), arg(1, X, J), nb_linkarg(2, J, C), nb_linkarg(1, X, C). Now the timings are better: /* Before */ ?- time(test2). % 6,007,999 inferences, 0.422 CPU in 0.427 seconds (99% CPU, 14241183 Lips) true. /* After */ ?- time(test2). % 5,007,999 inferences, 0.297 CPU in 0.298 seconds (100% CPU, 16869049 Lips) true. A wooping more than 100 milliseconds are gone!