Почему pyDatalog не завершается?
Я взглянул на pydatalog и создал эту программу быстрого конвертирования на основе этой записи в блоге:
convert_length.py:
from pyDatalog import pyDatalog
pyDatalog.create_terms(','.join((
'scale',
'convert',
'From',
'To',
'Intermediate',
'Value',
'X',
'Y')))
scale['meter', 'aln'] = 1.684132
scale['meter', 'angstrom'] = 1e+10
scale['meter', 'centimeter'] = 100
scale['meter', 'millimeter'] = 1000
scale['meter', 'inch'] = 39.370079
scale['light year', 'meter'] = 9.461e+15
scale['astronomical unit', 'meter'] = 1.496e+11
scale['foot', 'inch'] = 12
scale['yard', 'foot'] = 3
scale['mile', 'yard'] = 1760
scale['meter', 'm'] = 1
scale['centimeter', 'cm'] = 1
scale['millimeter', 'mm'] = 1
scale['light year', 'ly'] = 1
scale['astronomical unit', 'au'] = 1
scale[From, To] = 1/scale[To, From]
scale[From, To] = scale[From, Intermediate] * scale[Intermediate, To]
convert[Value, From, To] = Value * scale[From, To]
В оболочке все начинается хорошо, но последний оператор print просто зависает:
Python 3.5.2 (default, Jul 5 2016, 12:43:10)
Type "copyright", "credits" or "license" for more information.
IPython 5.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: run convert_length.py
In [2]: print(X.in_(range(2)))
X
-
0
1
In [3]: print((Y == convert[1, 'cm', 'inch']))
Y
-------------------
0.39370078999999997
In [4]: print(X.in_(range(2)) & (Y == convert[1, 'cm', 'inch']))
... и я даже не подставил X в 1, чтобы увидеть пару значений!
(scratch) ~/wk/pydatalog $ pip freeze | grep -i pydatalog
pyDatalog==0.17.1
Я делаю что-то явно неправильно?