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

Ris*_*abh 4 prolog iso-prolog

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

Tra*_*ers 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
Run Code Online (Sandbox Code Playgroud)

现在你想知道如何确定一个字符串aka atom的长度.一种方法是首先确定代码或字符,然后计算该列表的长度.但ISO也提供atom_length/2 谓词.它的工作原理如下:

?- atom_length(ant,X).
X = 3
Run Code Online (Sandbox Code Playgroud)

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

此外,原子的最大长度可能不同,有时会有一个额外的字符串类型,与经常使用的原子类型相比,它没有被表格化.但是这个额外的类型通常与双引号括起的字符串不同,后者只是字符列表的简写.

再见


Ris*_*abh 0

只是玩弄它,我将谓词指定为

?- length("hello", R).
R = 5.
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是它有效:)

  • 您可以检查您的 prolog 系统并查询 prolog 标志 double_quotes。如果它显示代码,则双引号将作为字符代码列表读入。SWI-Prolog: ?- current_prolog_flag(double_quotes,X)。X = 代码。?-“你好”= [104, 101, 108, 108, 111]。真的。 (3认同)