【发布时间】:2016-12-13 17:47:01
【问题描述】:
以下 Prolog 为目标 test1 和 test2 打印 done,但不是 test3。我的理解是这段代码中的match_test2 和match_test3 应该是等价的。如何通过断言创建 DCG 规则?
setup(['t','e','s','t']).
match_test1 --> ['t','e','s','t'].
test1 :-
setup(C),
phrase(match_test1,C),
write("done").
test2 :-
setup(C),
assert(match_test2(['t','e','s','t'],[])),
phrase(match_test2,C),
write("done").
test3 :-
setup(C),
assert(match_test3 --> ['t','e','s','t']),
phrase(match_test3,C),
write("done").
使用适用于 x86_64-darwin14.3.0 的 SWI-Prolog 版本 7.2.3,以 swipl -l bug.pl -t test1(或 test2、test3)运行
【问题讨论】: