0

プロローグにいくつかのアイテムを含むリストがあります。このリストの内容を「正規化」し、結果を新しいリストに書き込む必要があります。しかし、私はまだそれを行うのに問題があります。次のコードは、私がそれを行った方法を示しています。

 normalizeLists(SourceList, DestList) :-

 % get all the member of the source list, one by one
 member(Item, SourceList),

 % normalize the item
 normalizeItem(Item, NormItem),

 % add the normalize Item to the Destination List (it was set [] at beginning)
 append(NormItem, DestList, DestList).

問題は追加述語にあります。プロローグでは、次のような命令型プログラミングのようなことができないためだと思います。

DestList = DestList + NormItem、

しかし、Prolog でそのようなことを行うにはどうすればよいでしょうか? または、私のアプローチが間違っている場合、この種の問題を解決するためにどのようにプロローグ コードを記述すればよいでしょうか。

どんな助けでも本当に感謝しています。

乾杯

4

1 に答える 1

1

unificationによってバインドされると、Prolog の変数は変更できません。つまり、変数は自由であるか、明確な値を持っています (項、別の変数である可能性があります)。次に、空のリストではないappend(NormItem, DestList, DestList)場合は失敗します。NormItem

別の問題は、NormItemそれがリストではないということです。あなたが試すことができます

normalizeLists([], []).
normalizeLists([Item|Rest], [NormItem|NormRest]) :-

 % normalize the item
 normalizeItem(Item, NormItem),

 normalizeLists(Rest, NormRest).

または(Prologがサポートしている場合)そのような定義を完全にスキップし、maplistのような高次の述語を使用します

...
maplist(normalizeItem, Items, Normalized),
...
于 2012-12-15T06:33:05.260 に答える