0
以下Prolog打印done
的目標爲test1
和test2
,但不是test3
。我的理解是這個代碼中的match_test2
和match_test3
應該是等效的。如何通過斷言創建DCG規則?如何在Prolog中聲明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").
使用SWI-Prolog的版本7.2.3 x86_64的-darwin14.3.0,運行如swipl -l bug.pl -t test1
(或test2
,test3
)