Search code examples
streamprologpipeyap

Read a list from stream using Yap-Prolog


I want to run a (python3) process from my (yap) prolog script and read its output formatted as a list of integers, e.g. [1,2,3,4,5,6].

This is what I do:

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

However, it fails at read/2 predicate with the error:

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

I am sure that I can run the process correctly because with [stdout(std)] parameter given to process_create the program outputs [1,2,3,4,5,6] as expected.

Weird thing is that when I change the process to output some constant term (as constant_term) it still gives the same PL_int64 error. Appending a dot to the process' output ([1,2,3,4,5,6].) doesn't solve the error. Using read_term/3 gives the same error. read_string/3 is undefined in YAP-Prolog.

How can I solve this problem?


Solution

  • After asking at the yap-users mailing list I got the solution.

    Re-compiled YAP Prolog 6.2.2 with libGMP option and now it works. It may also occur in 32-bit YAP.