Символьные манипуляции над нечисловыми типами

Меня интересует библиотека Python, которая позволяет манипулировать символами, где символы и могут быть неизвестными произвольного типа.

Это код, который я хочу, чтобы написал:

>>> myexpression = symbol("foo") == "bar"
>>> print myexpression
foo == "bar"
>>> print myexpression(foo="quux")
False
>>> myexpression.or_(True)
True

Или какое-то его грубое приближение. На самом деле даже не нужно быть настолько умным, я был бы достаточно счастлив, если бы вызвал множество дополнительных методов самоанализа, чтобы получить что-то вроде приведенного выше (например, даже если логическая тавтология не упрощена напрямую)

Моим первым побуждением было взглянуть на sympy , но похоже, что библиотека делает сильное предположение, что символьные переменные должны быть числами; и я хотел бы хотя бы оперировать последовательностями и наборами:

>>> myexpression = sympy.Eq(sympy.Symbol("foo"), 5)
>>> myexpression
foo == 5
>>> myexpression = sympy.Eq(sympy.Symbol("foo"), "bar")
Traceback (most recent call last):
  ...
sympy.core.sympify.SympifyError: SympifyError: 'bar'

Есть ли способ научиться понимать нечисловые переменные или другую библиотеку, которая может делать подобные вещи?

8
задан SingleNegationElimination 26 September 2011 в 00:28
поделиться