私は Prolog を使用して、最も単純な形式のデータ (事実) 以上を処理することに取り組んでおり、経験豊富な Prologers からのガイダンスを探しています...
データや事実を動的に管理したい場合、次のようないくつかの主要な選択肢があります。
- オレゴン州プロローグでデータをアサーションとして管理
- オレゴン州プロローグからのデータベースへのインターフェース
- おそらく両方の組み合わせ
Prolog で事実をアサーションとして管理する場合、それらの事実を表現する最善の方法についても質問があります。person
名、姓、年齢を持つ who があるとします。私はそれを次のように断言できます:
person(first_name(_), last_name(_), age(_)).
または、人の属性が何であるかについて暗黙の仮定を持っています。
person(_, _, _). % first name, last name, age
人を何か他のものと関連付けたい場合、人の鍵が本当に必要です。したがって、私は人を次のように主張する傾向があるかもしれません:
person(id(_), ...). % Maintain id as a uniq person key; or done implicitly as above
もちろん、今は Prolog アサーションをリレーショナル データベース テーブル エントリのように見せています。そして、私は間違ったアプローチを取り、事実の表現を過度に複雑にしているのではないかと思います.
本当に、私の質問は次のとおりです。Prolog で中規模から複雑なデータを管理する際に考慮すべきベスト プラクティスはありますか? 命名規則はその小さな側面です。Prolog の assert/retract のような部分が非効率的であることを読みました。したがって、外部 SQL データベースと Prolog のみの表現に頼る場合など、データ編成自体にどのようにアプローチするかについても疑問に思っています。
補遺
リレーショナル データベースで行われているように、レコードにキーを使用することは、リレーショナル データベースがそれらを使用するまさにその理由から望ましいと思います。つまり、キーを維持する必要があります。ケースごとに Prolog でこれを手動で (明示的に) 行うのは面倒なようですが、一般的にはどのように行われますか? それとも私の仮定は正しいですか?