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

4

我正在尝试在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) ? 

有人能帮我配置这个功能吗?


5
用选项 --traditional 启动它。 - false
3
...或者使用 SWI7 之前的版本,例如这些 - false
文档:这个这个 - Will Ness
2个回答

5

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

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

这个更改的动机是为了释放./2,以便用于其他用途,特别是在dict中,正如你在查询时收到的错误消息所暗示的那样。

@921Kiyo 这应该被标记为正确答案。 - nicoabie

2
最好在传统符号中使用 |
?- X = '[|]'(1,[0]).
X = [1, 0].

可以这样写

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接