所以我在prolog中使用I / O而且我正在接受
Error: Arguments are not sufficiently instantiated
令我困惑的是为什么我没有得到关于谓词导致问题的任何信息 .
(编辑:在图像L2中是左侧显示的prolog文件的名称,[L2.pl]给出相同的错误 . )
该计划应该做什么:
该程序应该验证时态逻辑语句 . 它将读取一个文件(输入)并从文件中获取:一个状态连接的邻接列表(T);每个州包含哪些公式的另一个邻接列表(L);状态(S)和时间逻辑公式(F) . 然后它应检查状态S中公式F是否为真 .
以下是输入文件的外观示例:
[[s0, [s0, s2, s1]],
[s1, [s1, s0]],
[s2, [s0, s2]]].
[[s0, [p, q]],
[s1, [p]],
[s2, [q, r]]].
s0.
p
现在我只实施了一个简单的检查,看看公式F是否处于状态S.但程序不想编译,我不明白为什么 .
1 回答
在Prolog中,如果输入大写的标识符,则它被视为变量,即使它在查询中用于加载文件:
这会尝试加载(或查询)名称由变量
L2
给出的文件 . 当然,L2
未在上面实例化,因此这将失败并出现实例化错误 . 出于同样的原因,以下内容也将失败:咨询
[...]
需要一个原子作为文件名 . 如果你想要一个以大写字母开头的原子,你需要使用引号 . 所以以下内容将起作用:要么