2

演算子を使用して pyDatalog で述語を作成しようとしましたが、flammable ==[X] の定義が無効のようです:

from pyDatalog import pyDatalog
pyDatalog.create_terms('flammable, notFlammable, X, Y')

flammable[X] = ((X == 'wood') or (X == 'coal'))`
#TypeError: unhashable type: 'Query'

notFlammable[X] = ~flammable[X]
#This doesn't work either.

また、pyDataLog 述語に比較演算子を含めようとしましたが、これも機能しませんでした。

threeOrFour[X] = ((X < 3) or (X > 4))
#pyDatalog.util.DatalogError: Error: left hand side of comparison must be bound: </2 in line None of None

これらの比較演算子と否定演算子を pyDatalog 述語に含めることは可能ですか?

4

1 に答える 1

3

ここでの問題は、述語 (flammable および notFlammable) を割り当てたいが、関数割り当て構文を使用していることです。(述語と関数の違いを理解するために見つけた便利なリンクを次に示します。) pyDatalog で述語を割り当てる方法は、括弧内の引数と<=次のような割り当てを使用します。

from pyDatalog import pyDatalog
pyDatalog.create_terms('flammable, notFlammable, X, Y')

flammable(X) <= ((X == 'wood') or (X == 'coal'))


notFlammable(X) <= ~flammable(X)

次に、2番目の例では、論理プログラミングでは論理和を複数の行に分割するのが一般的です。

from pyDatalog import pyDatalog

pyDatalog.create_terms('threeOrFour,X')

threeOrFour(X) <= (X < 3)
threeOrFour(X) <= (X > 4)

これは機能します。

于 2016-01-24T19:11:46.077 に答える