如何在swi-prolog上调用谓词split_string?

sve*_*ten 4 prolog swi-prolog

我试图使用这里的文档中所谓的内置谓词split_string/4:http://www.swi-prolog.org/pldoc/man?predicate = split_string/4

但是,当我尝试使用它时,如示例中所示,我得到这样的结果:

?- split_string("a.b.c.d", ".", "", L).
ERROR: toplevel: Undefined procedure: split_string/4 (DWIM could not correct goal)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我应该先加载一些库吗?

fal*_*lse 5

split_string/4是SWI7中引入的SWI特定内置功能.它不像SICStus和ISO那样存在于Prolog的商业版本中,因此使用它将减少您未来的变更选择.另请注意,双引号的默认解释通常是codes,请参阅Prolog中'和'之间的区别是什么?

在SWI的早期版本中,即SWI6和之前的版本中,有一个版本concat_atom/3.atomic_list_concat/3这为您提供了类似的功能.

?- atomic_list_concat(L,'_',a_b__c).
L = [a,b,'',c].
Run Code Online (Sandbox Code Playgroud)

再就是ISO内置插件:atom_concat/3sub_atom/5它可能被用来实现它.因此使用atomic_list_concat/3不会造成很大的可移植性问题.