3 prolog
我目前陷入了序言问题。
到目前为止我有:
film(Title) :- movie(Title,_,_). (其中“ movie(T,_,_,)”是对我的数据库的引用)
namesearch(Title, Firstword) :- film(Title), contains_term(Firstword, Title).
Run Code Online (Sandbox Code Playgroud)
很难解释我需要什么帮助,但基本上有一个通配符我可以用来搜索以特定单词开头的所有电影,例如,如果我要搜索以单词“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'.
Run Code Online (Sandbox Code Playgroud)
如果它是一个代码列表,在爱丁堡传统的 Prolog 中称为字符串,您可以使用它“硬编码” append/3,也可以使用定子句语法来表示一般模式。
?- 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.
Run Code Online (Sandbox Code Playgroud)
注意84是T等的字符代码。
phrase/2是语法的“入门”。更多信息请参见dcg 。上面使用了以下定义:
... --> [] | [_], ... .
Run Code Online (Sandbox Code Playgroud)
与代码列表类似,字符列表提供了一种更易读的表示形式,并且仍然具有与列表谓词和定语从句语法兼容的优点:
?- 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.
Run Code Online (Sandbox Code Playgroud)
另请参阅此答案。