如何通过函数\ +从Horn子句中的DCG传递

时间:2013-07-12 09:41:46

标签: prolog dcg

我想将这样的语法规则翻译成一个子句

char(C) --> [C], { code_type(C, graph), \+ memberchk(C, "()") }.

但不起作用

char(C,In,Out):-
   In=[C|Out],
   code_type(C, graph), 
   \+ memberchk(C, "()").

1 个答案:

答案 0 :(得分:1)

您可以使用expand_term/2内置的Prolog谓词将语法规则扩展为子句:

?- expand_term((char(C) --> [C], { code_type(C, graph), \+ memberchk(C, "()") }), Clause).
Clause = (char(C, [C|_G1665], _G1651):- (code_type(C, graph), \+memberchk(C, [40, 41])), _G1651=_G1665).