2017-07-15 91 views
2

我在学习Prolog和。(a,[])== [a]。应该在SWI-Prolog中返回true,但它给我一个错误说如何使列表构造函数(例如(a,[])== [a]。)在Prolog中工作?

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> 

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

回答

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会话内改变它失败。

+0

@false我不知道。 :)我曾经作为代码发布交互片段一次,但后来被告知他们应该格式化为块引号。 –

+0

你从哪里见过这样的建议? – false

+0

@false我不记得确切。 –

相关问题