编辑Prolog程序以输出计算结果
我在其他问题中发现了一些这方面的问题,但我的问题有点不同 给定一个字符串,我必须输出另一个没有相邻重复项的字符串 例如,给定[a,a,b,b,c,d,a],我的输出将是[a,b,c,d,a] 现在,我编写了以下递归程序来检查某个给定字符串是否有相邻的重复项:编辑Prolog程序以输出计算结果,prolog,Prolog,我在其他问题中发现了一些这方面的问题,但我的问题有点不同 给定一个字符串,我必须输出另一个没有相邻重复项的字符串 例如,给定[a,a,b,b,c,d,a],我的输出将是[a,b,c,d,a] 现在,我编写了以下递归程序来检查某个给定字符串是否有相邻的重复项: notequal(A,[]). notequal(A,[X|S]) :- not(A=X). noadj([]):-!. noadj([A|S]) :- notequal(A,S), noadj(S). 我将如何修改它以输出我所描
notequal(A,[]).
notequal(A,[X|S]) :- not(A=X).
noadj([]):-!.
noadj([A|S]) :- notequal(A,S), noadj(S).
我将如何修改它以输出我所描述的内容?我尝试过多次,但我对prolog还不熟悉,似乎无法理解它的逻辑
当然,我还需要另一个变量,如果notequal对该元素为true,则该变量将包含一个元素。
因此,我的想法是遍历列表,只有通过“notequal”测试,才能向结果中添加某个术语
我将对此进行编辑:通过添加
noadjlist([X|S],[X|LS]) :- notequal(X,S), noadjlist(S,LS).
noadjlist([X|S],LS) :- noadjlist(S,LS).
noadjlist([],LS):-!.
但是,我的结果如下:
?-noadjlist([1,2,2,3],LS)
LS=[1,2,3|u 19316]
为什么我会在最后得到那个未实例化的变量
noadjlist([],LS):-!.
应该是
noadjlist([],[]):-!.
快速搜索<代码>noadjlist([],LS):-代码>应该是
noadjlist([],[]):-代码>@GuyCoder哇,真管用。基本上,在递归结束时,我添加了这个未实例化的LS变量,它是问题的根源。谢谢你,这是正确的。我还向第二个noadjlist子句添加了一个cut,以只获得一个解决方案,而不是多个,从而拒绝回溯。谢谢