dcgを使用してPrologに述語CleanList/3
を書き込む必要があります。これはリストを解析して同じ番号の新しいリストを返しますが、数字は削除されません。例えばDCGを使用してリストから非数字を削除する
:
?- cleanList([1,2,d,67,3.2,'CSI2120',foo,5],LL).
LL = [1, 2, 67, 3.2, 5].
私はベースケースを書いて、再帰的なケースでDCGを実装するのに苦労。誰かがこれで私を助けることができますか? cleanlist/1
への引数が空になったときにそれがないすべては空のリストを返して、非常に単純です
cleanlist([]) --> [].
:あなたが好きなベースケースを定義することによって開始することができ
cleanList(L,LL) :- cleanList(LL,L,[]),!.
あなたのベースケースはDCGではなく、基本ケースではありません。ベースケースは再帰的ではありませんが、基本的な最下位レベルの関係を与える必要があります。あなたが持っている再帰呼び出しは、2つしかかからない述語に対して3つの引数を使用します。 – lurker
'number(X)'が 'X 'が数字である場合にのみ成功します。 – lurker