我正在尝试在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) ?
有人可以帮我配置这项功能吗?
答案 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].