Prolog 具有相同开始和结束的所有子字符串
我必须做家庭作业,但我对Prolog的知识非常有限。任务如下:Prolog 具有相同开始和结束的所有子字符串,prolog,declarative-programming,Prolog,Declarative Programming,我必须做家庭作业,但我对Prolog的知识非常有限。任务如下: 编写一个Prolog程序,可以列出一个字符串的所有子字符串,其长度至少为两个字符,并且第一个和最后一个字符相同 例如: ?- sameend("teletubbies", R). R = "telet"; R = "ele"; R = "eletubbie"; R = "etubbie"; R = "bb"; false. 我解决这个问题的方法是,我应该用head/tail遍历字符串,找到下一个字母的索引,它与当前字母相同(它满足
编写一个Prolog程序,可以列出一个字符串的所有子字符串,其长度至少为两个字符,并且第一个和最后一个字符相同 例如:
?- sameend("teletubbies", R).
R = "telet";
R = "ele";
R = "eletubbie";
R = "etubbie";
R = "bb";
false.
我解决这个问题的方法是,我应该用head/tail遍历字符串,找到下一个字母的索引,它与当前字母相同(它满足最小2长度要求),并用
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).
如果Prolog在library()中有append/2和last/2,那么
sameend(S,[F|T]) :-
append([_,[F|T],_],S),last(T,F).
你能展示一下你目前的方法吗?这只是一个想法,但在代码中可能会是这样的:sameend([H | T],R):-sameend([T],R),%并且应该有一个递归调用来再次检查同一个字符在哪里,然后从H的位置到它的下一个位置的sub|u string()。