Prolog 为什么有些DCG测试用例使用断言(Rest=[])?

Prolog 为什么有些DCG测试用例使用断言(Rest=[])?,prolog,dcg,Prolog,Dcg,这使用断言(Rest=[])? 是 因为它相当于短语(DCGBody,InputList,[])。它只是Rest=[],在测试用例Rest=[]中,有什么意义?添加断言(Rest=[])有什么好处?短语(GB_uuu2,Xs,[])等同于短语(GB_u2,Xs)但短语(GB_u2,Xs0,Xs)的第一个解决方案不一定是Xs=[] 下面是一个简单的例子: :- set_prolog_flag(double_quotes, chars). ao1 --> "a" | []. ao2 --&

这使用
断言(Rest=[])?

因为它相当于短语(DCGBody,InputList,[])。它只是
Rest=[]
,在测试用例
Rest=[]
中,有什么意义?添加
断言(Rest=[])
有什么好处?

短语(GB_uuu2,Xs,[])
等同于
短语(GB_u2,Xs)
短语(GB_u2,Xs0,Xs)的第一个解决方案不一定是
Xs=[]

下面是一个简单的例子:

:- set_prolog_flag(double_quotes, chars).

ao1 --> "a" | [].

ao2 --> [] | "a".
虽然
词组(aoX,“a”)
两种方法都能成功,但
词组(aoX,“a”,Xs)
显示了找到的解决方案顺序的不同

?- phrase(ao1, "a", Xs).
      Xs = "a"
   ;  Xs = [].
?- phrase(ao2, "a", Xs).
      Xs = []
   ;  Xs = "a".
短语(GB_uuu2,Xs,Xs)
等同于
短语(GB_uu2,Xs)
,但是
短语(GB_u2,Xs0,Xs)
的第一个解决方案不一定是
Xs=[]

下面是一个简单的例子:

:- set_prolog_flag(double_quotes, chars).

ao1 --> "a" | [].

ao2 --> [] | "a".
虽然
词组(aoX,“a”)
两种方法都能成功,但
词组(aoX,“a”,Xs)
显示了找到的解决方案顺序的不同

?- phrase(ao1, "a", Xs).
      Xs = "a"
   ;  Xs = [].
?- phrase(ao2, "a", Xs).
      Xs = []
   ;  Xs = "a".