Почему 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

Я делаю что-то явно неправильно?

0 ответов

Другие вопросы по тегам