Prolog述語をDCGコードに変換しようとしています。私が文法の熟語に慣れていても、DCGがどのようにリストと一緒に働くのか、どのように使用するのかを理解するのにはいくつかの問題があります。Prologでリストを使用するDCG
cleanList([], []).
cleanList([H|L], [H|LL]) :-
number(H),
cleanList(L, LL),
!.
cleanList([_|L], LL) :-
cleanList(L, LL).
それは、数値以外の要素を削除し、単純な述語です:
実は、これは私の述語です。 DCGに同じ動作を書きたいと思います。
私は(明らかに動作しません)のようなものを試してみました:
cleanList([]) --> [].
cleanList([H]) --> {number(H)}.
cleanList([H|T]) --> [H|T], {number(H)}, cleanList(T).
はそれが間違っているものを私に説明したり、欠けているものは可能ですか?
ありがとうございました!
1つの大きな問題lemは '... - > [H | T]、...'です。 DCGにシーケンスを読み込ませ、 '[H | T]'は任意の長さにします。あなたはなぜその言葉に 'T'を含めたのか分かりません。 'cleanList(T)'へのあなたの再帰呼び出しは、すでに入力上で 'T'をスキャンします。 – lurker
ええ、私はそれを得る!返信ありがとう、私はDCGがどのように再帰的にシーケンスを読んでいるのか理解できませんでしたが、今は問題ありません。 – Naeoth