Prolog - 为列表的每个元素添加一个特殊字符
Prolog - Add a special character to every element of a list
我正在尝试向列表的每个元素添加一个特殊字符 (*)。
我想在元素的开头和结尾添加它,所以如果我有:
list(apple,orange,pear)
它将是:
list(*apple*,*orange*,*pear*)
有没有办法在序言中做到这一点?
谢谢。
要连接两个原子,您可以使用 ISO 谓词 atom_concat/3:
?- atom_concat('*', apple, StarAtom), atom_concat(StarAtom, '*', StarAtomStar).
StarAtom = '*apple',
StarAtomStar = '*apple*'.
使用此谓词,您可以定义以下新谓词:
% starry_atom(+Atom, -StarAtomStar)
starry_atom(Atom, StarAtomStar) :-
atom_concat('*', Atom, StarAtom),
atom_concat(StarAtom, '*', StarAtomStar).
示例:
?- starry_atom(apple, StarryAtom).
StarryAtom = '*apple*'.
要将starry_atom/2
应用于列表的所有元素,假设列表的所有元素都是原子,您可以使用谓词maplist/3.
?- maplist(starry_atom, [apple, orange, pear], List).
List = ['*apple*', '*orange*', '*pear*'].
注意 在 SWI-Prolog 中,您还可以使用谓词 atomic_list_concat/2.
?- atomic_list_concat(['*', apple, '*'], Atom).
Atom = '*apple*'.
我正在尝试向列表的每个元素添加一个特殊字符 (*)。
我想在元素的开头和结尾添加它,所以如果我有:
list(apple,orange,pear)
它将是:
list(*apple*,*orange*,*pear*)
有没有办法在序言中做到这一点?
谢谢。
要连接两个原子,您可以使用 ISO 谓词 atom_concat/3:
?- atom_concat('*', apple, StarAtom), atom_concat(StarAtom, '*', StarAtomStar).
StarAtom = '*apple',
StarAtomStar = '*apple*'.
使用此谓词,您可以定义以下新谓词:
% starry_atom(+Atom, -StarAtomStar)
starry_atom(Atom, StarAtomStar) :-
atom_concat('*', Atom, StarAtom),
atom_concat(StarAtom, '*', StarAtomStar).
示例:
?- starry_atom(apple, StarryAtom).
StarryAtom = '*apple*'.
要将starry_atom/2
应用于列表的所有元素,假设列表的所有元素都是原子,您可以使用谓词maplist/3.
?- maplist(starry_atom, [apple, orange, pear], List).
List = ['*apple*', '*orange*', '*pear*'].
注意 在 SWI-Prolog 中,您还可以使用谓词 atomic_list_concat/2.
?- atomic_list_concat(['*', apple, '*'], Atom).
Atom = '*apple*'.