我有一个方法 length(list,var),它给了我一个列表的长度,但我想找到一个字符串的长度,有人有解决方案吗?
5 回答
如果您想使用 ISO Prolog,则不会使用name/2
谓词。
ISO Prolog 为您提供atom_codes/2
和atom_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 位代码。
原子的最大长度也可能不同,有时与经常出现的原子类型相比,还有一个额外的字符串类型没有列出。但是这种额外的类型通常与双引号括起来的字符串不同,后者只是字符列表的简写。
由于字符串是原子,因此您不能直接操作它们以获取长度、提取子字符串等。首先您必须将它们转换为字符列表atom_chars/2
:
atom_chars(StrVar, ListVar), length(ListVar, LengthVar).
只是在玩它,我把谓词作为
?- length("hello", R).
R = 5.
令人惊讶的是它起作用了:)
也许是这样:
string_length(+String, -Length)
来自 Prolog 手册。
用这个 :
?- same_length('abhi',Z).
Z=4
如果您尝试为此创建一个 .pl 文件,请使用以下命令:
samelen(X ,Y) :- string_length(X,Y).
// ctrl+c & ctrl+b to save this file
//Now write this as query:
samelen(roger,Y).
Y=5