SWI-Prolog编辑器接受无效编码致参数未充分实例化错误排查
解决SWI-Prolog中"Arguments are not sufficiently instantiated"错误——编码引发的隐藏坑
最近我在用SWI-Prolog 8.2.1版本学习Prolog,主要参考的是《Learn Prolog Now!》这本书。跟着书中的知识库5,我写下了这段代码:
loves(vincent,mia). loves(marcellus,mia). loves(pumpkin,honey_bunny). loves(honey_bunny,pumpkin). jealous(X,Y) :- loves(X,Z),loves(Y,Z).
结果加载这段代码的时候,直接抛出了错误:
ERROR: Arguments are not sufficiently instantiated
一开始我完全懵了——这代码和书上写的一模一样啊,难道是SWI-Prolog版本兼容问题?还是我哪里理解错了规则?反复检查了几遍逻辑,jealous/2的定义完全符合书中的说明,变量绑定也没毛病。
折腾了好一会儿,我突然想到会不会是文件编码的问题?毕竟代码是从PDF里直接复制粘贴到编辑器的。查看文件属性后发现,编辑器居然把文件保存成了UCS2 LE BOM编码!赶紧改成UTF-8编码,重新加载,居然一切正常了!
现在问题是解决了,但我还是有点纳闷:为什么编辑器在保存成这种不适合Prolog文件的编码时,连个警告都不给?这坑踩得属实有点猝不及防。
内容的提问来源于stack exchange,提问作者Jack Griffin
相关产品推荐
相关产品推荐

