谓词将交换的前两个字母中的Prolog的原子(Predicate that will swap th

2019-10-21 03:23发布

我必须写一个谓词其中将交换的前两个字母长度为两个或更多个的原子。 长度的一个原子是不变。

?- interchange(cat,X). 
X = act;

我想用的名字函数分裂原子:

?- 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] ;

我怎样才能提高我的代码,从而获得所需的输出。 提前致谢。

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


文章来源: Predicate that will swap the first two letters in an atom in Prolog
标签: prolog