谓词将交换Prolog中原子中的前两个字母

时间:2014-10-12 09:05:04

标签: prolog

我必须编写一个谓词,它将在长度为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] ;

如何改进代码以获得所需的输出。在此先感谢。

1 个答案:

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