用于完成字符串的Prolog通配符

我目前陷入了一个序言问题.

到目前为止我有:

电影(标题): – 电影(标题,_,_). (‘movie(T,_,_,)’是对我的数据库的引用)

namesearch(Title, Firstword) :- film(Title), contains_term(Firstword, Title).

很难解释我需要什么帮助,但基本上有一个通配符可以用来搜索所有以特定单词开头的电影,例如,如果我要搜索所有以“The”开头的电影.

是否有一个允许我输入的通配符:namesearch(X,’The *’)?

我试过使用这样的星号,它不起作用,

谢谢你的帮助

这一切都取决于标题的表示方式.

原子

如果它表示为原子,则需要sub_atom(Atom,Before,Length,After,Sub_atom)

?- Title = 'The Third Man', sub_atom(Title, 0, _, _, 'The').
Title = 'The Third Man'.

代码清单

如果它是在爱丁堡传统的Prologs中被称为字符串的代码列表,您可以使用append / 3“硬编码”它,或者您可以使用Definite Clause Grammars作为一般模式.

?- set_prolog_flag(double_quotes,codes).
true.

?- append("The",_, Pattern), Title = "The Third Man", Pattern = Title.
Pattern = Title, Title = [84, 104, 101, 32, 84, 104, 105, 114, 100|...].

?- Title = "The Third Man", phrase(("The",...), Title).
Title = [84, 104, 101, 32, 84, 104, 105, 114, 100|...] ;
false.

注意84是T等的字符代码.

短语/ 2是语法的“条目”.有关更多信息,请参见以上使用了以下定义:

... --> [] | [_], ... .

字符列表

与代码列表类似,字符列表提供了更易读的表示,它仍具有与列表谓词和Definite Clause Grammars兼容的优点:

?- set_prolog_flag(double_quotes,chars).
true.

?- append("The",_, Pattern), Title = "The Third Man", Pattern = Title.
Pattern = Title, Title = ['T', h, e, ' ', 'T', h, i, r, d|...].

?- Title = "The Third Man", phrase(("The",...), Title).
Title = ['T', h, e, ' ', 'T', h, i, r, d|...] ;
false.

另见this answer.

https://stackoverflow.com/questions/27806409/prolog-wildcard-for-completing-a-string

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:用于完成字符串的Prolog通配符