Довольно плохо знаком с Прологом, но я пытаюсь реализовать контекстно-свободную грамматику, и у меня возникла проблема при прохождении тестового примера с моими правилами.
Я пытался изменить порядокиз моих правил, чтобы казаться более логически правильными, но я не могу получить последовательные правильные результаты, и я продолжаю получать ту же ошибку стека.Я думаю, что это как-то связано с рекурсивностью vp --> vp, np.
, но если это так, то почему np --> np, pp.
также не дает мне ошибку?Мой код ниже:
:- use_module(library(tabling)).
:- table s/2.
s --> np, vp.
np --> det, n.
np --> np, pp.
vp --> vp, pp.
vp --> v, np.
pp --> p, np.
det --> [the].
n --> [cop].
n --> [criminal].
n --> [street].
v --> [chased].
p --> [in].
p --> [by].
Если запросить это в идеале, должно быть возвращено true :
$- s([the,cop,chased,the,criminal], []).
И запросить это должно вернуть false :
$- s([the, cop, the, criminal, chased], []).
Я пробовал оба, и они просто дают мне ту же ошибку:
Stack limit (0.2Gb) exceeded
Stack sizes: local: 0.2Gb, global: 22Kb, trail: 5Kb
Stack depth: 1,561,893, last-call: 0%, Choice points: 1,561,869
Probable infinite recursion (cycle):
[1,561,893] vp([length:3], _1424)
[1,561,892] vp([length:3], _1456)
Любые отзывы приветствуются!