1

我想从我的(yap)序言脚本中运行一个(python3)进程并读取其格式化为整数列表的输出,例如[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]

奇怪的是,当我将过程更改为输出一些常数项(as constant_term)时,它仍然会给出相同的PL_int64错误。在进程的输出 ( [1,2,3,4,5,6].) 中添加一个点并不能解决错误。使用read_term/3给出了同样的错误。read_string/3在 YAP-Prolog 中未定义。

我怎么解决这个问题?

4

1 回答 1

0

在 yap-users 邮件列表中询问后,我得到了解决方案

使用 libGMP 选项重新编译 YAP Prolog 6.2.2,现在它可以工作了。它也可能出现在 32 位 YAP 中。

于 2017-03-28T07:16:40.347 回答