1

我必须在文件中搜索一个字符串,如果该术语存在,我就断言一个事实。

例如

我的文件:

  title"Fast and furious"
  year"2013"
  actor"Vin Diesel"

assert(title(Fast and furious)),
assert(year(2013)),
assert(actor(Vin Diesel)).

我能怎么做?

编辑:

是否可以提取字符串的一部分?

<title>Fast and Furious</title>

我只会得到“速度与激情”,然后我会断言(标题(速度与激情))。有可能吗?我不使用 swi_prolog 的库(sgml)。

4

1 回答 1

2

在 SWI-Prolog 中,简单的方法是使用phrase_from_file

file --> "title", dquo(Title), "\nyear", dquo(Year), "\nactor", dquo(Actor),
   {assert(title(Title)), assert(year(Year)), assert(actor(Actor))}.

dquo(A) --> "\"", any(S), "\"", {atom_codes(A, S)}.

any([]) --> [].
any([C|Cs]) --> [C], any(Cs).

编辑:DCG 是普通的、声明性的 Prolog:要使用与双引号不同的分隔符,请尝试

title(T) --> "<title>", any(S), "</title>", {atom_codes(T, S)}.

我希望您会欣赏 DCG 规则的灵活性。SWI-Prolog 有一个辅助,其中包含一些方便的预定义规则。

于 2013-06-24T19:32:49.460 回答