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).