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

用于完成字符串的Prolog通配符,prolog,dcg,Prolog,Dcg,我目前被困在一个序言问题上 到目前为止,我已经: film(Title):-movie(Title,,,。(其中“movie(T,,,,,)”是对我的数据库的引用) 很难解释我需要什么帮助,但基本上有没有一个通配符可以用来搜索所有以特定单词开头的电影,例如,如果我搜索所有以“the”开头的电影 是否有一个通配符允许我这样输入:namesearch(X,'The*') 我试过像这样使用星号,但它不起作用 感谢您的帮助这完全取决于标题的表达方式 原子 如果它被表示为一个原子,那么您需要sub\u a

我目前被困在一个序言问题上

到目前为止,我已经:

film(Title):-movie(Title,,,。
(其中“
movie(T,,,,,)
”是对我的数据库的引用)

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

是否有一个通配符允许我这样输入:
namesearch(X,'The*')

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


感谢您的帮助

这完全取决于标题的表达方式

原子 如果它被表示为一个原子,那么您需要
sub\u atom(atom,Before,Length,After,sub\u atom)

代码清单 如果它是一个在爱丁堡传统的序言中被称为字符串的代码列表,那么您可以使用
append/3
对其进行“硬编码”,也可以使用Definite子句语法作为一般模式

?- 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
是语法的“条目”。更多信息,请参阅。上文使用了以下定义:

... --> [] | [_], ... .
字符列表 与代码列表类似,字符列表提供了更具可读性的表示形式,它仍然具有与列表谓词和限定子句语法兼容的优点:

?- 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.

另请参见。

Eh。。。你以3分钟(+1)的优势击败我,提出了
sub_atom/4
。)@潜伏者:你为什么不回答?它已经在这里等了一个月了,我总共浪费了400美元在它上面(也就是说,没有人奖励400个代表…),因为某种原因,我没有看到那个。道歉。我来看看。
... --> [] | [_], ... .
?- 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.