【发布时间】:2013-12-13 13:36:04
【问题描述】:
有没有办法在 Prolog 中检查一个字符串是否是另一个字符串的子字符串?我尝试将字符串转换为字符列表,然后检查第一组是否是第二组的子集,这似乎不够严格。这是我当前的代码:
isSubstring(X,Y):-
stringToLower(X,XLower),
stringToLower(Y,YLower),
isSubset(XLower,YLower).
isSubset([],_).
isSubset([H|T],Y):-
member(H,Y),
select(H,Y,Z),
isSubset(T,Z).
stringToLower([],[]).
stringToLower([Char1|Rest1],[Char2|Rest2]):-
char_type(Char2,to_lower(Char1)),
stringToLower(Rest1,Rest2).
如果我用这个来测试
isSubstring("test","tesZting").
它返回yes,但应该返回no。
【问题讨论】:
-
子列表算法应该满足 - 你能举一个你的字符列表子集算法的例子和导致它失败的输入吗?
-
我刚刚编辑了问题并添加了代码和示例。
-
我不确定,但你想要的是一个子序列。见en.wikipedia.org/wiki/Substring
-
我的意思是Java中的字符串。
标签: prolog substring dcg subsequence