我必须编写一个谓词,它将在长度为2或更长的原子中交换前两个字母。长度为1的原子不变。
?- interchange(cat,X).
X = act;
我想使用name函数来分割原子:
?- name(food,[X,Y|Z]).
Z = "od",
Y = 111,
X = 102 ;
这是我写的代码:
inter(X,[]).
inter(X,[Q|W]):-
name(X,[H,T|R]), reverse([H,T],W), !, append([W],[R],F).
我得到了这个输出:
P = [] ;
P = [_VCSF, 111, 102] ;
如何改进代码以获得所需的输出。在此先感谢。
答案 0 :(得分:1)
使用标准的atom_chars/2
内置谓词:
swap_first_two_characters(Atom, SwappedAtom) :-
( atom_chars(Atom, [Char1, Char2| Chars]) ->
% two or more chars
atom_chars(SwappedAtom, [Char2, Char1| Chars])
; % one char atom
SwappedAtom = Atom
).