我正在学习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>
任何人都知道如何解决这个问题?
答案 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会话中更改它会失败。