使用prolog交换单词的前两个字母

使用prolog交换单词的前两个字母,prolog,Prolog,我想写一个谓词,它将交换 长度为两个或两个以上的原子。长度1原子不变。 e、 g.?-互通式立交(第X类)。 X=act; 使用“名称” 我不想这样做,谁能帮帮我吗 是否可以将字母转换为变量,并使用第三个变量进行交换,如“C”编程 书面代码如下:- interchange(X,[]). interchange(X,[H|T]):- swap([A,B],W). swap(X,Y):- name(X,[A,B|C])-> name(Y,[B,A|C]). 我不确定我的逻辑。我也做了同

我想写一个谓词,它将交换 长度为两个或两个以上的原子。长度1原子不变。
e、 g.?-互通式立交(第X类)。 X=act; 使用“名称”

我不想这样做,谁能帮帮我吗

是否可以将字母转换为变量,并使用第三个变量进行交换,如“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?-咨询(内部变更)。 警告:已重新定义交换/2 警告:已重新定义交换/2 符合事实的 24-交换(第X类)。 X=[]; X=[u VCTC | u VCTD];
失败。

您已阅读了有关的文档

然后选择一个合适的内置谓词并说:

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])
  .
可能重复的
swap\u first\u 2(“”,X)。
失败。而
swap\u first\u 2(X,a)
给出了一个恼人的答案。@false:
'
应该失败:O.P.的问题陈述只指定长度为1或更长的原子。至于“恼人的答案”,请参阅我的修正案。现在
先交换\u 2(X,X)。
自动失败-意味着没有解决方案-这是不正确的。而
swap\u first\u 2(ab,ba)
有一个冗余的解决方案