在prolog中获取String的前N个字符

时间:2017-11-05 09:20:47

标签: prolog substring

我正在尝试获取字符串的前N个字符。通过查看以下问题,我了解到我可以使用

> sub_atom(str, X, Y, W, Z).

Getting last char of a string in Prolog

问题是我找不到这个函数的好文档,这里是正式文档: http://www.swi-prolog.org/pldoc/man?predicate=sub_atom/5

我很乐意找到关于这个功能如何工作的链接或解释。另外,我将很乐意为以下示例提供帮助: 如何获得“prolog / a”中“/”之前的所有字符,这些字符的工作方式如下:

  

sub_atom(prolog / a,X,Y,W,Z)。 =>序言

1 个答案:

答案 0 :(得分:3)

我认为文档很清楚:

sub_atom(+Atom, ?Before, ?Len, ?After, ?Sub)
  • Atom 是您从中扣除Subatom的初始原子。
  • 之前是子原子开始的位置,计数从1开始。
  • Len 是Subatom的长度
  • 之后是剩余子原子的长度,例如sub_atom(abc, 1, 1, After, b).给出After = 1(剩余的是长度为1的c)
  • Sub 是从初始原子获取的Subatom。

在您的示例中,问题是prolog/r不是原子而是复合词,因为它包含'/'。虽然"prolog/r"(用双引号作为字符串)是一个原子。

我建议使用atomic_list _concat/3来实现

?- atomic_list_concat(L, '/', "prolog/r").
L = [prolog, r].