如何在SWI-Prolog中使用列表构造函数(./2)

时间:2017-06-03 20:59:24

标签: prolog swi-prolog

我正在尝试在SWI-Prolog中使用列表构造函数,但我得到'dict'预期错误。

例如,

.(a, []) == [a].

ERROR: Type error: `dict' expected, found `a' (an atom)
ERROR: In:
ERROR:   [11] throw(error(type_error(dict,a),_14808))
ERROR:   [10] '$type_error'(dict,a) at /Applications/SWI-Prolog.app/Contents/swipl/boot/init.pl:3369
ERROR:    [9] '$dicts':'.'(a,[],_14874) at /Applications/SWI-Prolog.app/Contents/swipl/boot/dicts.pl:46
ERROR:    [8] '<meta-call>'(user:(...,...)) <foreign>
ERROR:    [7] <user>
Exception: (9) '.'(a, [], _14200) ? 

有人可以帮我配置这项功能吗?

2 个答案:

答案 0 :(得分:4)

SWI-Prolog 7.x使用不同的列表构造函数'[|]'/2,而不是传统的./2 Prolog构造函数:

?- '[|]'(1,[]) == [1].
true.

此更改的动机是免费./2用于其他用途,特别是在 dict 条款中,正如您在查询中收到的错误消息中所示。

答案 1 :(得分:2)

最好以常规表示法使用|

?- X = '[|]'(1,[0]).
X = [1, 0].

可以像这样写

?- X = [1|[0]].
X = [1, 0].