【发布时间】:2017-09-04 20:17:18
【问题描述】:
我有以下程序:
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),并且有 El Captain (10.11.6) 的 mac。
我尝试过 guitracer,它构建列表 [90,80,80] 但输出“ZPP” 我不知道为什么会这样。
SWISH在线prolog输出[90,80,80],所以一定是SWI-Prolog的东西。
编辑
它似乎将数字转换为字符 90=Z、80=P 等...
为什么要这样做?
【问题讨论】:
-
是的,在 SWI Prolog 中,
"ZPP"表示Z、P和P的代码“字符串”(列表)。所以它们是等价的。不确定您将 SWI Prolog 设置为哪种模式会导致它默认将[90, 80, 80]显示为字符串。也许更重要的是,您至少有两个单例变量并且您的查询不会终止(无限生成解决方案Output = [90, 80, 80])。
标签: prolog