你不能用它length/2
来计算原子的长度。但是,您可以首先将每个原子转换为字符列表,atom_chars/2
然后使用length/2
它来获取其长度:
atom_lengths([], []).
atom_lengths([Atom|Atoms], [Length|LAtoms]):-
atom_chars(Atom, L),
length(L, Length),
atom_lengths(Atoms, LAtoms).
测试:
?- atom_lengths([one, two, three, four], LS).
LS = [3,3,5,4]
除了使用该对atom_chars/2-length/2
,您还可以使用 ISO 内置谓词atom_length/2
:
atom_lengths([], []).
atom_lengths([Atom|Atoms], [Length|LAtoms]):-
atom_length(Atom, Length),
atom_lengths(Atoms, LAtoms).
或使用findall/3
:
atom_lengths(Atoms, LAtoms):-
findall(Length, (member(Atom, Atoms), atom_length(Atom, Length)), LAtoms).
正如评论者所建议的,一个更好的习惯用法是使用maplist/3
:
atom_lengths(Atoms, LAtoms):-
maplist(atom_length, Atoms LAtoms).