如何使列表构造函数(例如(a,[])== [a]。)在Prolog中工作?
问题描述:
我在学习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>
任何人都知道如何解决这个问题?
答
使用--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会话内改变它失败。
@false我不知道。 :)我曾经作为代码发布交互片段一次,但后来被告知他们应该格式化为块引号。 –
你从哪里见过这样的建议? – false
@false我不记得确切。 –