Prolog - 正则表达式匹配

Prolog - regular expression matching

对于我的大学课程作业,我必须为已设置的 PROLOG 问题编写一些解决方案。他们为我们提供了一个庞大的 facts/predicates 数据库,其中是 lecturers/researchers 在大学发表的文章。其中一个问题要求我们获取所有以某个字符串开头的标题(他们评估我们时会告诉我们)。我不知道如何匹配谓词中的部分标题。

这里是谓词的一个例子:

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). 我希望它成为 return 标题列表,例如 Y = ['Title 1', 'Title 2']. 等。但是,它只是 return 一个空列表,我想是因为没有只有 'Title' 的标题,而是后面有一些东西。

如何让 Prolog 的正则表达式部分工作,以便它匹配字符串的 beginning/end?

感谢您的帮助:)

您对 findall 的用法本质上是错误的。

最后一个参数正确:结果。

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

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

因此,这应该有效:

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

但尝试找到更好的变量名。