首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Prolog中获取给定表的一些组合

在Prolog中获取给定表的一些组合
EN

Stack Overflow用户
提问于 2016-03-30 05:25:03
回答 2查看 58关注 0票数 1

我正在尝试弄清楚如何使用尾递归来将给定的列表与此模式进行划分。例如,实例列表等于1,2,3,4。

代码语言:javascript
复制
clause([1,2,3,4],X). would return:
X = [1,2,3,4]
X = [1,2,3]
X = [2,3,4]
X = [1,2]
X = [2,3]
X = [3,4]
X = [1]
X = [2]
X = [3]
X = [4]

如果能给我任何建议,我将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2016-03-30 05:41:52

代码语言:javascript
复制
list_sublist(Xs, Ys) :-
   Ys = [_|_],
   phrase(( ..., seq(Ys), ...), Xs).

... --> [] | [_], ... .

seq([]) --> [].
seq([E|Es]) --> [E], seq(Es).

| ?- list_sublist([1,2,3,4], Xs).
Xs = [1] ;
Xs = [1,2] ;
Xs = [1,2,3] ;
Xs = [1,2,3,4] ;
Xs = [2] ;
Xs = [2,3] ;
Xs = [2,3,4] ;
Xs = [3] ;
Xs = [3,4] ;
Xs = [4].
票数 3
EN

Stack Overflow用户

发布于 2016-03-30 14:28:43

有一个SWISH sample展示了如何获得组成更简单模式的功能:

代码语言:javascript
复制
suffix(Xs, Ys) :-
    append(_, Ys, Xs).

prefix(Xs, Ys) :-
    append(Ys, _, Xs).

sublist_not_empty(Xs, [Y|Ys]) :-
    suffix(Xs, Zs),
    prefix(Zs, [Y|Ys]).

我添加了“非空”条件,因为Y|Y不能匹配空列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36295374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档