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).
我将如何修改它以输出我描述的内容?我已经尝试过多次,但我是 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]。
为什么我最后会得到那个未实例化的变量?
解决方案
noadjlist([],LS):-!.
应该
noadjlist([],[]):-!.
推荐阅读
- c# - API 混合了来自不同设备的数据
- angular - 如何在 Angular 6 中翻译动态属性“[attr]”?
- php - 在 PHP 中显示 SOAP API 结果
- mysql - MYSQL 查询上的 INDEX
- java - OpenAM OpenDJ dockerisation 问题:无法使用旧数据源重新部署
- sql - 使用oracle在一个表中根据最大值连接三个表
- css - CSS:在行固定位置设置3个项目列表
- angular - 将 FormControl 传递给子组件 - 未指定名称的表单控件没有值访问器
- html - .htaccess 中的 Access-Control-Allow-Origin 在子目录中不起作用
- docker - 为什么 docker 为所有容器提供不同范围的 IP 地址以及如何将其设为默认值?