【发布时间】:2011-12-01 03:20:03
【问题描述】:
我已经使用 assert(....) 将给定的上下文无关语法插入到数据库中 如果语法类似于
S-->a,S,b
S-->c
这个语法被插入到数据库中。 我必须编写一个 dcg 来为数据库中的 cfg 生成句子。 例如,如果我以这种方式定义 dcg myDcg('S',str),则应该调用 'S'(非终端)或 替换 由 aSb 或 c|d 左右。
问题是每次遇到非终结符('S')生成句子时,我如何通过数据库中的事实调用/替换'S'。
希望你理解我的问题,如果没有,我会尝试编辑问题。
下面(示例代码)是我想要做的 这不是dcg。
myGrammar([], []):-!.
myGrammar([T|Rest], [T|Sentence]):-
myGrammar(Rest, Sentence).
myGrammar([NT|Rest], Sentence):-
grammar(NT, Rest1),
append(Rest1,Rest, NewRest),
myGrammar(NewRest, Sentence).
无论何时遇到终端,都应该打印出来,遇到非终端时,它会回溯。
【问题讨论】:
标签: prolog dcg prolog-assert