SWI Prolog PIO DCG 无法处理空字节

SWI Prolog PIO DCGs can't deal with null bytes

我有一个文件就是字母a。我可以用这个 DCG 来“解析”它:

identity([]) --> [].
identity([H|T]) --> [H], identity(T).
?- phrase_from_file(identity(X), "jah.txt").
X = [97] ;
false.

这是正确的——但是当我向我的文件添加一个 NUL 字节时:

当我尝试 post 上述查询时,Prolog 永远锁定。我想它必须在某处对以空字符结尾的字符串做一些事情,但我不确定在这里做什么——我正在使用 DCG 来解析二进制文件,所以我需要能够处理空字节。

我需要将 type(binary) 作为选项传递给 phrase_from_file/3

phrase_from_file(identity(X), "jah.txt", [type(binary)]).