5

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

4

5 回答 5

8

如果您想使用 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 位代码。

原子的最大长度也可能不同,有时与经常出现的原子类型相比,还有一个额外的字符串类型没有列出。但是这种额外的类型通常与双引号括起来的字符串不同,后者只是字符列表的简写。

于 2012-05-03T13:03:56.633 回答
2

由于字符串是原子,因此您不能直接操作它们以获取长度、提取子字符串等。首先您必须将它们转换为字符列表atom_chars/2

atom_chars(StrVar, ListVar), length(ListVar, LengthVar).
于 2012-05-03T13:01:10.660 回答
0

只是在玩它,我把谓词作为

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

令人惊讶的是它起作用了:)

于 2012-05-03T16:58:35.253 回答
0

也许是这样:

string_length(+String, -Length)

来自 Prolog 手册。

于 2014-12-22T13:46:54.330 回答
0

用这个 :

?- 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 
于 2021-12-26T12:24:05.373 回答