Prolog 从列表中查找子序列
你好,我不知道怎么解决作业。我应该从列表中找到连续的元素组合。例如:列表[1,2,3] 应该给我[1],[2],[3],[1,2],[2,3],[1,2,3],但我的问题是,我的尝试也给了我[1,3] 代码:Prolog 从列表中查找子序列,prolog,Prolog,你好,我不知道怎么解决作业。我应该从列表中找到连续的元素组合。例如:列表[1,2,3] 应该给我[1],[2],[3],[1,2],[2,3],[1,2,3],但我的问题是,我的尝试也给了我[1,3] 代码: 这里的问题是,在给定列表的每个元素上,都有两个子句: 选择项目的第二行;及 第三行,不选择项目 这意味着您将生成所有列表,其中每个项目都可以选择包含或排除它 对于您问题中定义的子序列,这是一个不同的故事:您基本上有两个选择点: “开始”子序列的点;及 “停止”子序列的点 停止子序列实际上与
这里的问题是,在给定列表的每个元素上,都有两个子句:
subsequence([H|T], [H|T2]) :-
myprefix(T, T2).
subsequence([_|T], T2) :-
subsequence(T, T2).
这将产生预期的结果:
?- subsequence([1, 2, 3], X).
X = [1] ;
X = [1, 2] ;
X = [1, 2, 3] ;
X = [2] ;
X = [2, 3] ;
X = [3] ;
false.
谢谢你的帮助!我注意到这个解决方案不适用于我在prolog中构建的学校,但它确实适用于我的个人计算机@这是一个相当简单的通用解决方案。你们学校的序言到底有什么不及格的地方?可能
前缀/2
或子序列/2
是由该系统预定义的?
subsequence([H|T], [H|T2]) :-
myprefix(T, T2).
subsequence([_|T], T2) :-
subsequence(T, T2).
?- subsequence([1, 2, 3], X).
X = [1] ;
X = [1, 2] ;
X = [1, 2, 3] ;
X = [2] ;
X = [2, 3] ;
X = [3] ;
false.