首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找字符串中的字符串

查找字符串中的字符串
EN

Stack Overflow用户
提问于 2014-05-13 18:45:07
回答 2查看 142关注 0票数 1

我有一个任意输入的符号序列,例如progressive,必须确定它是否包含输入的符号序列,例如progress。我的想法是把字符串分解成字母列表和比较列表。

代码语言:javascript
复制
'break'(Str,L):-'name'(Str,L1),'change'(L1,L).
'change'([],[]).
'change'([X|T],[S|T1]):-'name'(S,[X]),'change'(T,T1).

'break'(progressive,X).
X = [p, r, o, g, r, e, s, s, i|...].

但我不知道如何打破这两个词和比较列表。

工作方案实例:

代码语言:javascript
复制
contain([progressive, progress]).   - Yes.
contain([progressive, progrev]).    - No.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-13 19:05:48

不需要在引号中添加谓词名(除非使用空格或其他非字母字符,但通常不应该这样做)。

最好是使用ISO标准的atom_codes而不是name

下面是您想要的一些高级实现:

代码语言:javascript
复制
contain(X, Y) :-
    atom_codes(X, Xcodes),
    atom_codes(Y, Ycodes),
    append(_, End, Xcodes),
    append(Ycodes, _, End).

测试运行(我使用的是contain(progressive, progress).而不是示例中的contain([progressive, progress]).,因为这对我来说更有意义。如果您需要完全符合这个示例,只需将谓词contain(X, Y)的头改为contain([X, Y])):

代码语言:javascript
复制
?- contain(progressive, progress).
true 

?- contain(progressive, progrev).
false.
票数 4
EN

Stack Overflow用户

发布于 2014-05-13 20:20:49

我认为一个更好的解决方案是使用atom/5:它得到了国际标准化组织的认可,并为文本分析提供了更多的功能。一个使用的例子

代码语言:javascript
复制
9 ?- sub_atom('swi-prolog', _,_,_, o).
true ;
true ;
false.

10 ?- sub_atom('swi-prolog', N,_,_, o).
N = 6 ;
N = 8 ;
false.
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23639219

复制
相关文章

相似问题

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