私はcore.logicで遊んで始めました。私は現在、専門的に取り組んでいる問題に似た単純なものを実装しようとしています。しかし、問題の一部が私を困惑させてしまった...core.logicの '外部結合'をシミュレートする方法は?
私の例の単純化として、私はアイテムのカタログがあり、それらのいくつかは特定の国でのみ利用可能であり、一部は特定の国では利用できない各国。私は、項目のリスト、および例外のようなものを指定できるようにしたいと思います:
(defrel items Name Color)
(defrel restricted-to Country Name)
(defrel not-allowed-in Country Name)
(facts items [['Purse 'Blue]
['Car 'Red]
['Banana 'Yellow]])
(facts restricted-to [['US 'Car]])
(facts not-allowed-in [['UK 'Banana]
['France 'Purse]])
可能な場合は、私はむしろ許さ-で指定していないと思い、すべての国のために、制限のあるアイテムのセットとして比較的小さいので、特定の国のアイテムの許可/拒否を1回変更できるようにしたいと考えています。アイテムは、アイテム
- 必要があります:どのように私は次の制約で、国のためのアイテム/色のリストを与えるルールを記述することができます
「-許可されていないイン」リストに
- のどちらかではないこと:には国はありません
- 制限-し、その項目
- 国/アイテムのペアがrestricted-であるためリスト
これを行うにはいくつかの方法がありますの一覧を表示するには?私は事を完全に間違った方法で考えていますか?あなたは論理プログラミングでゴールを否定起動したときに
、私はあなたが値ではなく、クエリ変数を意味すると仮定しますか?申し訳ありませんが、論理プログラミングの最後のブラシは、ほぼ25年前に学部のプロローグコースでした... –
これはアンバウンドまたはアングラウンド変数にすることはできません。アンバウンド論理変数が含まれていない場合は、値はグラウンドになります([1 2 0._]はグラウンドではありません)。関数が目標で、クエリ変数を引数として渡している場合、これは関連します。この要点では、 'item-colors-for-country'は、最初の引数が必要です。目標は私の最初の答えよりも柔軟性があり、構成可能です。たとえば、米国で入手可能な小銭の色を照会することができます。 https://gist.github.com/1557417 – Ambrose
説明をありがとう! –