所有具有相同开始和结束的子字符串



我必须解决作业,但我对序言的了解非常有限。任务如下:
编写一个可以列出字符串的所有子字符串的序言程序,其长度至少为两个字符,第一个和最后一个字符是相同的。

例如:

?- sameend("teletubbies", R).
R = "telet";
R = "ele";
R = "eletubbie";
R = "etubbie";
R = "bb";
false.

我对这个问题的方法是,我应该用头/尾部在字符串上迭代,并找到与电流相同的下一个字母的索引sub_string谓词。

这取决于您确切的字符串含义。传统上,在Prolog中,字符串是字符列表。为了确保您真正得到这些,请使用以下指令。请参阅此答案。

:- set_prolog_flag(double_quotes, chars).
sameend(Xs, Ys) :-
   phrase( ( ..., [C], seq(Zs), [C], ... ), Xs),
   phrase( ( [C], seq(Zs), [C] ), Ys).
... --> [] | [_], ... .
seq([]) -->
   [].
seq([E|Es]) -->
   [E],
   seq(Es).

如果您的序言具有附加/2和library(列表(中的最后/2,则很容易,因为

sameend(S,[F|T]) :-
    append([_,[F|T],_],S),last(T,F).

最新更新