prolog中的I/O:错误:参数没有充分实例化,没有进一步的信息

prolog中的I/O:错误:参数没有充分实例化,没有进一步的信息,prolog,Prolog,因此,我在prolog中使用I/O,并且 Error: Arguments are not sufficiently instantiated 让我困惑的是,为什么我没有得到任何关于导致问题的谓词的信息 (编辑:在图像中,L2是左侧显示的prolog文件的名称,[L2.pl]给出了相同的错误。) 程序应该做什么: 程序应该验证一个时态逻辑语句。它将读取一个文件(输入),并从文件中获取:状态连接方式的邻接列表(T);每个状态包含的公式的另一个邻接列表(L);一个状态(S)和一个时态逻辑公式

因此,我在prolog中使用I/O,并且

Error: Arguments are not sufficiently instantiated  
让我困惑的是,为什么我没有得到任何关于导致问题的谓词的信息

(编辑:在图像中,L2是左侧显示的prolog文件的名称,[L2.pl]给出了相同的错误。)

程序应该做什么:
程序应该验证一个时态逻辑语句。它将读取一个文件(输入),并从文件中获取:状态连接方式的邻接列表(T);每个状态包含的公式的另一个邻接列表(L);一个状态(S)和一个时态逻辑公式(F)。然后它应该检查公式F在状态S中是否为真

以下是输入文件的外观示例:

[[s0, [s0, s2, s1]],
 [s1, [s1, s0]],
 [s2, [s0, s2]]].

[[s0, [p, q]],
 [s1, [p]],
 [s2, [q, r]]].

s0.

p

现在,我只执行了一个简单的检查,以查看公式F是否处于状态S。但是程序不想编译,我不明白为什么。

在Prolog中,如果输入大写的标识符,它将被视为变量,即使在查询中用于加载文件:

?- [L2].
这将尝试加载(或查询)一个文件,该文件的名称由变量
L2
给出。当然,
L2
在上面没有实例化,因此这将失败,并出现实例化错误。出于同样的原因,以下操作也将失败:

?- [L2.pl].
consult
[…]
需要一个atom作为文件名。如果您想要一个以大写字母开头的atom,则需要使用引号。因此,以下措施将起作用:

?- ['L2'].


在Prolog中,如果输入大写的标识符,即使在查询中用于加载文件,也会将其视为变量:

?- [L2].
这将尝试加载(或查询)一个文件,该文件的名称由变量
L2
给出。当然,
L2
在上面没有实例化,因此这将失败,并出现实例化错误。出于同样的原因,以下操作也将失败:

?- [L2.pl].
consult
[…]
需要一个atom作为文件名。如果您想要一个以大写字母开头的atom,则需要使用引号。因此,以下措施将起作用:

?- ['L2'].


我不明白你怎么称呼你的谓词。插图仅显示您正在输入
[L2]。
,这不是一个查询。该语法的作用是告诉prolog“查阅”变量
L2
给出的文件。但是
L2
没有设置为任何值(它没有实例化),因此会出现实例化错误。哦,是的!抱歉,L2是prolog文件的名称。我再加上。[L2.pl]给出了同样的错误非常感谢!回答它,我会检查它是否已解决:)我看不出你是如何调用谓词的。插图仅显示您正在输入
[L2]。
,这不是一个查询。该语法的作用是告诉prolog“查阅”变量
L2
给出的文件。但是
L2
没有设置为任何值(它没有实例化),因此会出现实例化错误。哦,是的!抱歉,L2是prolog文件的名称。我再加上。[L2.pl]给出了同样的错误非常感谢!回答这个问题,我会检查它是否已解决:)