1
誰もがこの問題を解決する方法を知っていますプロローグの比較問題
counts式内の演算子の出現回数をカウントします。たとえば、クエリ:
?- count(a+b*c-(2+3*4)/(5*(2+a)+(b+c)^f((d-e)*(x-y))), *, C).
はC上の最初の引数と出力として与えられた式の演算子*の出現回数をカウントします
私はSWI-プロローグ
誰もがこの問題を解決する方法を知っていますプロローグの比較問題
counts式内の演算子の出現回数をカウントします。たとえば、クエリ:
?- count(a+b*c-(2+3*4)/(5*(2+a)+(b+c)^f((d-e)*(x-y))), *, C).
はC上の最初の引数と出力として与えられた式の演算子*の出現回数をカウントします
私はSWI-プロローグ
を使用していますがこれです宿題?
はここにいくつかのヒントです:
Prologのオペレータは、通常プロローグ用語周りのシンタックスシュガーです。式3 * 2 + 1
は、用語'+'('*'(3,2),1)
として解析されます。
組み込み述語=..
は、用語をリストに分解します。その頭部はファンクタであり、その末尾には元の用語の引数である[分解されていない]項が含まれます。
組み込み述語functor/3
は、そのファンクタおよびアーティーで用語を統一します。
arg/3
を見ると、指定された用語の引数を序数で調べることができます。
これで、非常に単純な再帰的解決策が提示されるはずです。希望の演算子の要因を考慮する必要がある場合は、もう少し畳み込まれています(ただしあまり意味はありません)。