Regex Prolog-正则表达式匹配

Regex Prolog-正则表达式匹配,regex,prolog,Regex,Prolog,对于我的大学课程,我必须为已经设置好的序言问题写一些解决方案。他们给了我们一个巨大的事实/谓词数据库,这是大学讲师/研究人员发表的文章。其中一个问题要求我们获取以某个字符串开头的所有标题(当他们评估我们时会告诉我们)。我无法计算如何匹配谓词中的部分标题 下面是谓词的一个示例: article('Title 1', 'author1'). article('Title 2', 'author1'). article('Title 3', 'author1'). article('Title 4'

对于我的大学课程,我必须为已经设置好的序言问题写一些解决方案。他们给了我们一个巨大的事实/谓词数据库,这是大学讲师/研究人员发表的文章。其中一个问题要求我们获取以某个字符串开头的所有标题(当他们评估我们时会告诉我们)。我无法计算如何匹配谓词中的部分标题

下面是谓词的一个示例:

article('Title 1', 'author1').
article('Title 2', 'author1'). 
article('Title 3', 'author1').
article('Title 4', 'author1').
article('Title 5', 'author2').
article('Title 6', 'author2').
到目前为止我试过的代码是:

findArticlesWith(X,Y) :-
    findall(X,article(match(X,Y),_),Y).
如您所见,输入将是要匹配的字符串,然后是列表的自由变量
Y
。我正在尝试匹配以该字符串开头的所有标题,并将它们放入列表
Y
。若我查询了
findArticlesWith('Title',Y)。
我希望它返回一个标题列表,例如
Y=['Title 1','Title 2'].
等等。但,它只返回一个空列表,我假设是因为并没有标题只有'Title',而后面有一些内容

如何使Prolog的Regex部分工作,使其与字符串的开头/结尾匹配


感谢您的帮助:)

您对
findall
的使用本质上是错误的

最后一个参数是正确的:结果

第一个参数描述如何形成结果项。您不能在此处使用
X
,因为
X
是您的搜索字符串,并且已经定义。如果必须的话,请使用其他工具,
Z

第二个参数指定
Z
必须实现的目标:它应该是一篇文章的标题,并以
X
开头

因此,这应该是可行的:

findArticlesWith(X,Y) :-
    findall(Z, (article(Z,_), string_concat(X,_,Z)), Y).

但是,试着找到更好的变量名。

这里也有同样的问题:太好了,谢谢。同样感谢您向我解释
findall
,我知道我的解释不太正确,但您的解释让我更清楚。谢谢