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

时间:2014-06-13 18:23:20

标签: 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)

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

1 个答案:

答案 0 :(得分:5)

split_string/4是SWI7中引入的特定于SWI的内置程序。它不像SICStus和ISO那样存在于Prolog的商业版本中,因此使用它将减少您未来的变更选择。另请注意,双引号的默认解释通常为codes,请参阅What is the difference between ' and " in Prolog?

在以前的SWI版本中,即SWI6及之前的版本,有concat_atom/3个版本。 atomic_list_concat/3为您提供可比较的功能。

?- atomic_list_concat(L,'_',a_b__c).
L = [a,b,'',c].

然后有ISO内置函数:atom_concat/3sub_atom/5可用于实现它。因此,使用atomic_list_concat/3不会造成很大的可移植性问题。