Чтение списка из потока с помощью Yap-Prolog

Я хочу запустить процесс (python3) из моего скрипта пролога (yap) и прочитать его выходные данные в формате целых чисел, например: [1,2,3,4,5,6],

Вот что я делаю:

process_create(path(python3),
    ['my_script.py', MyParam],
    [stdout(pipe(Out))]),
read(Out, OutputList),
close(Out).

Однако, это терпит неудачу в предикате read/2 с ошибкой:

PL_unify_term: PL_int64 not supported
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe

Я уверен, что я могу запустить процесс правильно, потому что с [stdout(std)] параметр, данный process_create выходы программы [1,2,3,4,5,6] как и ожидалось.

Странно то, что когда я изменяю процесс для вывода некоторого постоянного члена (как constant_term) это все равно дает то же самое PL_int64 ошибка. Добавление точки к выводу процесса ([1,2,3,4,5,6].) не решает ошибку. С помощью read_term/3 выдает ту же ошибку. read_string/3 не определено в YAP-Прологе.

Как я могу решить эту проблему?

1 ответ

Решение

Спросив в списке рассылки yap-users, я получил решение.

Перекомпилировал YAP Prolog 6.2.2 с опцией libGMP и теперь он работает. Это также может произойти в 32-битном YAP.

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