如何使用prolog查找字符串长度

如何使用prolog查找字符串长度,prolog,iso-prolog,Prolog,Iso Prolog,我有一个方法length(list,var),它给了我一个列表的长度,但我想找到字符串的长度,有人有解决方案吗?因为字符串是原子,你不能直接操纵它们来获得长度、提取子字符串等。首先你必须用原子字符/2将它们转换成字符列表: atom_chars(StrVar, ListVar), length(ListVar, LengthVar). 如果您想使用ISO Prolog,那么您不会使用 name/2谓词 ISO Prolog为您提供了atom\u代码/2和atom\u字符/2。他们向你提供 将一

我有一个方法length(list,var),它给了我一个列表的长度,但我想找到字符串的长度,有人有解决方案吗?

因为字符串是原子,你不能直接操纵它们来获得长度、提取子字符串等。首先你必须用
原子字符/2
将它们转换成字符列表:

atom_chars(StrVar, ListVar), length(ListVar, LengthVar).

如果您想使用ISO Prolog,那么您不会使用
name/2
谓词

ISO Prolog为您提供了
atom\u代码/2
atom\u字符/2
。他们向你提供 将一个原子前后转换为一系列代码的功能 或字符列表。原子是Prolog系统的字符串,并且 字符只是长度为1的原子。下面是一些示例调用 在这两个谓词中:

?- atom_codes(ant, L).
L = [97,110,116]
?- atom_codes(X, [97,110,116]).
X = ant
?- atom_chars(ant, X).
X = [a,n,t]
?- atom_chars(X,[a,n,t]).
X = ant
现在您想知道如何确定字符串的长度。一个 方法是首先确定代码或字符,然后 计算此列表的长度。但是ISO也提供了一个
atom\u长度/2
谓语其工作原理如下:

?- atom_length(ant,X).
X = 3
许多Prolog系统提供这组内置谓词,即 SWI Prolog、GNU Prolog、Jekejeke Prolog等。。可用字符 代码范围和编码取决于Prolog系统。有些允许 只有8位代码、一些16位代码和一些32位代码

此外,原子的最大长度也可能不同,有时也会有所不同 是一个额外的字符串类型,与atom相比,它不是表化的 类型,通常为。但是这种额外的类型通常是不一样的 作为双引号括起来的字符串,它只是 字符列表


再见,

只是在玩它,我给了谓词

?- length("hello", R).
R = 5.
令人惊讶的是,它成功了:)

也许是这样的:

string_length(+String, -Length)

来自Prolog手册。

检查文章这篇文章很混乱(混合了字符串和原子),建议使用非标准谓词。我建议不要读它。我希望得到的是Prolog字符串。
name/2
不是ISO Prolog,也不是这里的最佳选择。谢谢,@Mog。更新。但是正如CM所说,atom_长度是ISOOG中更好的选项,您可以检查prolog系统并查询prolog标志双引号。如果它显示代码,则双引号作为字符代码列表读入。SWI序言:?-当前序言标志(双引号,X)。X=代码“你好”=[104、101、108、108、111]。是的。这对SWI Prolog可用,但我不知道这个谓词是否是其他Prolog系统内置的。