首页 > 解决方案 > 编辑 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).

我将如何修改它以输出我描述的内容?我已经尝试过多次,但我是 prolog 的新手,我似乎无法理解它的逻辑。

当然,我需要另一个变量,如果该元素的 notequal 为真,它将包含一个元素。所以我的想法是遍历列表,如果它通过“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|_19316]。

为什么我最后会得到那个未实例化的变量?

标签: prolog

解决方案


noadjlist([],LS):-!.

应该

noadjlist([],[]):-!.

推荐阅读