用于完成字符串的 Prolog 通配符
Prolog wildcard for completing a string
我目前遇到了序言问题。
到目前为止我有:
film(Title) :- movie(Title,_,_).
(其中“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 中称为字符串,您可以 "hard code" 它与 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等的字符编码
phrase/2
是 "the entry" 语法。有关更多信息,请参阅 dcg。上面使用了以下定义:
... --> [] | [_], ... .
字符列表
与代码列表类似,字符列表提供了一种更具可读性的表示形式,它仍然具有与列表谓词和定子从句文法兼容的优点:
?- 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。
我目前遇到了序言问题。
到目前为止我有:
film(Title) :- movie(Title,_,_).
(其中“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 中称为字符串,您可以 "hard code" 它与 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等的字符编码
phrase/2
是 "the entry" 语法。有关更多信息,请参阅 dcg。上面使用了以下定义:
... --> [] | [_], ... .
字符列表
与代码列表类似,字符列表提供了一种更具可读性的表示形式,它仍然具有与列表谓词和定子从句文法兼容的优点:
?- 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。