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

时间:2017-07-15 22:35:17

标签: prolog swi-prolog

我正在学习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/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>

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

使用--traditional命令行选项启动SWI Prolog可执行文件(由于用户注释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 ?-

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

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