使用prolog交换单词的前两个字母
我想写一个谓词,它将交换 长度为两个或两个以上的原子。长度1原子不变。使用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]). 我不确定我的逻辑。我也做了同
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)
有一个冗余的解决方案