現在、Prolog で DCG を使用して XML ファイルを解析しています。次のような単純な XML を解析できる次のコード スニペットを取得できました。
<author> <name> <f> arthur </f>
<m> conan </m>
<l> doyle </l>
</name>
<bday> <d> 22 </d>
<m> 5 </m>
<y> 1859 </y>
</bday>
</author>
<author> <name> <f> william </f>
<l> shakespeare </l>
</name>
<bday> <d> 23 </d>
<m> 4 </m>
<y> 1564 </y>
</bday>
</author>
$
DCG は次のように定義されます。
xml([E]) --> element(E).
xml([E|L]) --> element(E), xml(L).
element(E) --> begintag(N), elements(L), endtag(N), {E =.. [N|L]}.
elements(L) --> xml(L).
elements([E]) --> [E].
begintag(N) --> ['<', N, '>'].
endtag(N) --> ['<', '/', N, '>'].
この場合、DCGがどのように機能するかを誰かが説明してくれますか? DCG の引数を理解するのに本当に苦労しています (例: [E] in xml([E]); [E|L] in xml([E|L]). ) ありがとうございます!