我想编写一个谓词,它将交换前两个字母 长度为2或更大的原子。长度为1的原子没有变化 例如? - 交换(猫,X)。 X =行为; 使用'name'
我没有想到这样做,任何人都可以帮助我。
是否可以将字母转换为变量并使用第三个变量进行交换,如'C'编程?
书面代码如下: -
interchange(X,[]).
interchange(X,[H|T]):- swap([A,B],W).
swap(X,Y):- name(X,[A,B|C])-> name(Y,[B,A|C]).
我不确定我的逻辑。我做了同样的事情,但它不起作用。
我的o / p为:
23? - 咨询(inter_change)。 警告:交换/ 2重新定义 警告:swap / 2重新定义 真正。 24? - 交换(猫,X)。 X = []; X = [_VCTC | _VCTD]; 失败。
答案 0 :(得分:0)
您阅读了有关analysis and construction of atoms的文档。
然后你选择一个合适的内置谓词并说出如下内容:
swap_first_2( X , X ) :-
nonvar(X) ,
atom_codes( X , [_] )
.
swap_first_2( X , Y ) :-
nonvar(X) ,
atom_codes(X,[A,B|C]) ,
atom_codes(Y,[B,A|C])
.
swap_first_2( X , Y ) :-
nonvar(Y) ,
atom_codes(Y,[A,B|C]) ,
atom_codes(X,[B,A|C])
.