Current_predicate(make/0) is false

Hi all,

I mentioned that

?- current_predicate(make/0).
false.

But, after actually calling make, SWI-Prolog changes its mind:

?- make.
true.

?- current_predicate(make/0).
true.

I use SWI-Prolog 9.0.4 (threaded, 64 bits) on Raspberry Pi.

The docs say,

Note that current_predicate/1 does not succeed for predicates that can be autoloaded unless they are imported using autoload/2.

and make/0 is autoloaded (see its docs). Many predicates are like this. You have also current_predicate/2.

2 Likes

Thank you Boris.

Now it makes sense. Although, I must admit, I did not even thought that make/0 is not always loaded.

Am I right that any predicate without a remark “Avaliability: built-in” in the doc is actually autoloaded?

“Autoloaded” means something more specific. Did you try to search the documentation yet? Or ask an AI assistant?

The page for make/0 has a link to “(can be autoloaded”) i.e. SWI-Prolog -- Automatic loading of libraries

True. Although I don’t have this “Availability: :- use_module(library(make)). (can be autoloaded)“ remark in the doc when invoked from the prolog REPL as help(make). Maybe my SWI-Prolog is already dated.