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

时间:2012-05-03 12:12:22

标签: prolog iso-prolog

我有一个方法长度(list,var),它给出了列表的长度,但我想找到一个String的长度,任何有解决方案的人?

4 个答案:

答案 0 :(得分:6)

如果你想去ISO Prolog,那你就不会用了 name/2谓词。

ISO Prolog为您提供atom_codes/2atom_chars/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_length/2 谓语。它的工作原理如下:

?- atom_length(ant,X).
X = 3

许多Prolog系统提供这组内置谓词,即 SWI Prolog,GNU Prolog,Jekejeke Prolog等。可用的角色 代码范围和编码取决于Prolog系统。一些允许 只有8位代码,一些16位代码和一些32位代码。

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

再见

答案 1 :(得分:3)

由于字符串是原子,因此无法直接操作它们来获取长度,提取子字符串等。首先,您必须使用atom_chars/2将它们转换为字符列表:

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

答案 2 :(得分:1)

只是玩它,我把谓词作为

?- length("hello", R).
R = 5.

令人惊讶的是它有效:)

答案 3 :(得分:0)

也许这个:

string_length(+String, -Length)

来自Prolog手册。