Swi prolog错误输出

Swi prolog错误输出,prolog,Prolog,我有以下计划: filter([],_What,[]). filter(List,What,Output):- not(select(What-Val,List,Rest)), filter([],What,Output). filter(List,What,[Val|Output]):- select(What-Val,List,Rest), filter(Rest,What,Output). 我不明白为什么会有以下问题: filter([age-90,

我有以下计划:

filter([],_What,[]).

filter(List,What,Output):-
    not(select(What-Val,List,Rest)), 
    filter([],What,Output).

filter(List,What,[Val|Output]):-
    select(What-Val,List,Rest),
    filter(Rest,What,Output).
我不明白为什么会有以下问题:

filter([age-90, age-80,age-80],age,Output).
产出:

Output = "ZPP" 
我有最新版本的SWI prolog(7.4.2),还有mac和El Captain(10.11.6)

我试过guitracer,它构建列表[90,80,80],但输出“ZPP” 我不知道为什么会这样

SWISH online prolog输出[90,80,80],因此它必须与SWI prolog有关

编辑

它似乎将数字转换为90=Z、80=p等字符


它为什么会这样做?

很难说它是如何加载的,但这种行为可能是由
描述文本(true)
触发的:

其思想是,如果将文本处理为字符代码列表,则输出很难读取。Scription_text/1启用尝试解释的Scripte/1挂钩 作为字符代码列表的整数列表,如果成功,则将结果打印为字符串


GUI跟踪器可以配置为执行此操作,但我不认为这是默认设置。

很难说它是如何加载的,但这种行为可以由
scrapture\u text(true)
触发:

其思想是,如果将文本处理为字符代码列表,则输出很难读取。Scription_text/1启用尝试解释的Scripte/1挂钩 作为字符代码列表的整数列表,如果成功,则将结果打印为字符串


GUI跟踪器可以配置为执行此操作,但我认为这不是默认设置。

是的,在SWI Prolog中,
“ZPP”
表示
Z
p
p
的“字符串”(列表)代码。所以它们是等价的。不确定您将SWI Prolog设置为什么模式,从而使其默认以字符串形式显示
[90,80,80]
。也许更重要的是,您至少有两个单例变量,并且您的查询不会终止(无限生成解决方案
输出=[90,80,80]
)。是的,在SWI Prolog中,
“ZPP”
表示
Z
P
P
的代码“字符串”(列表)。所以它们是等价的。不确定您将SWI Prolog设置为什么模式,从而使其默认以字符串形式显示
[90,80,80]
。也许更重要的是,您至少有两个单例变量,并且您的查询不会终止(无限生成解决方案
Output=[90,80,80]
)。这似乎是问题所在,将其设置为true在mac上不起作用,它仍然会输出数字。我在windows swi prolog上测试了它,它在描绘_文本(true)时正确输出字符。在我的Mac上运行良好。此功能的可移植性也与此问题无关。开始一个新问题,包括详细信息(版本,从二进制、Macports、自制软件安装,在终端或应用程序中使用等)。这似乎是问题所在,将其设置为true在mac上不起作用,它仍然输出数字。我在windows swi prolog上测试了它,它在描绘_文本(true)时正确输出字符。在我的Mac上运行良好。此功能的可移植性也与此问题无关。开始一个新问题,包括详细信息(版本、二进制安装、Macports、自制等,在终端或应用程序中使用等)
6 ?- A = [90,80,80].
A = [90,80,80].

7 ?- portray_text(true).
true.

8 ?- A = [90,80,80].
A = "ZPP".