【问题标题】:How do I call the predicate split_string on swi-prolog?如何在 swi-prolog 上调用谓词 split_string?
【发布时间】:2014-06-13 18:23:20
【问题描述】:

我正在尝试使用此处文档中所谓的内置谓词 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)

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

【问题讨论】:

  • 您需要 SWI-Prolog 版本 7 或更高版本

标签: swi-prolog


【解决方案1】:

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

在以前版本的 SWI 中,即 SWI6 及之前的版本中,分别有 concat_atom/3atomic_list_concat/3 为您提供类似的功能。

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

然后是 ISO 内置函数:atom_concat/3sub_atom/5,它们可以用来实现它。所以使用atomic_list_concat/3 不会造成很大的可移植性问题。

【讨论】:

  • 感谢您的贡献。那么,如何获取字符串的第二部分,例如“Prolog/a”,如何获取“a”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2012-04-06
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多