我有一个方法长度(list,var),它给出了列表的长度,但我想找到一个String的长度,任何有解决方案的人?
答案 0 :(得分:6)
如果你想去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位代码。
原子的最大长度也可能不同,有时也会有所不同 是一个额外的字符串类型,与原子相比没有表格 通常的类型。但这种额外的类型通常是不一样的 作为双引号括起来的字符串,这只是一个简写 一个角色列表。
再见
答案 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手册。