“DCG中的任何术语”字符(_)无法按预期工作

时间:2017-12-02 15:47:31

标签: prolog dcg

我正在循环查看一系列句子并尝试验证它们是否在语法上正确。句子是单词列表。看起来像这样:

verifySen([]).
verifySen([H|T]) :-
  sentence(H,[]),
  verifySen(T).

其中,为verifySen提供列表清单。 sentence(H,[])尝试检查某些内容是否有效。这就是问题所在。我目前的DCG看起来像这样:

    sentence --> subject_phrase, verb_phrase, {write('this IS a valid sentence'), nl}.
    sentence --> anything, {write('this is NOT a valid sentence'),nl}.
    anything --> [_], anything.
    ...

代码适用用于 某个有效句子,但失败并在某些内容无效时产生错误。我得到stream '<stream>(000..random numbers...)' does not exist.

有人可以提供建议吗?

1 个答案:

答案 0 :(得分:0)

我认为你错过了// 0的基本情况,所以当句子无效时,它将直到流的末尾然后失败。应该是

 anything --> [_], anything.
 anything --> [].