如何使列表构造函数(例如,(a,[])==[a])在Prolog中工作?

如何使列表构造函数(例如,(a,[])==[a])在Prolog中工作?,prolog,swi-prolog,Prolog,Swi Prolog,我正在学习序言和(a,[])==[a]。在SWI Prolog中应该返回true,但它给了我一个错误提示 ERROR: Type error: `dict' expected, found `a' (an atom) ERROR: In: ERROR: [11] throw(error(type_error(dict,a),_4020)) ERROR: [10] '$type_error'(dict,a) at /Applications/SWI- Prolog.app/Contents

我正在学习序言和(a,[])==[a]。在SWI Prolog中应该返回true,但它给了我一个错误提示

ERROR: Type error: `dict' expected, found `a' (an atom)
ERROR: In:
ERROR:   [11] throw(error(type_error(dict,a),_4020))
ERROR:   [10] '$type_error'(dict,a) at /Applications/SWI-
Prolog.app/Contents/swipl/boot/init.pl:3369
ERROR:    [9] '$dicts':'.'(a,[],_4086) at /Applications/SWI-
Prolog.app/Contents/swipl/boot/dicts.pl:46
ERROR:    [8] '<meta-call>'(user:(...,...)) <foreign>
ERROR:    [7] <user>
ERROR:Type ERROR:'dict'应为'a'(原子)
错误:在:
错误:[11]抛出(错误(类型错误(dict,a),\U 4020))
错误:[10]“$type_ERROR”(dict,a)位于/Applications/SWI-
Prolog.app/Contents/swipl/boot/init.pl:3369
错误:[9]“$dicts':”。(a,[],4086)位于/Applications/SWI-
Prolog.app/Contents/swipl/boot/dicts.pl:46
错误:[8]“”(用户:(…,…))
错误:[7]

有人知道如何解决这个问题吗?

使用命令行选项启动SWI Prolog可执行文件(用户注释:)

然后它就起作用了:

文档中提到了这一点(请参阅本页底部附近的“传统”)


可以看出,尝试在正在运行的SWI会话中更改它失败

@错,我不知道。:)我曾经将交互片段作为代码发布过一次,但后来有人告诉我它们应该被格式化为块引号。你在哪里看到过这样的建议?@false我记不清了。
1 ?- .(a,[]) == [a].
true.

2 ?- current_prolog_flag( traditional, X).
X = true.

3 ?- set_prolog_flag( traditional, false).
ERROR: set_prolog_flag/2: No permission to modify flag `traditional'

4 ?-