You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:52:32