我已经按照下面的说明在我的linux机器上设置并安装了interprolog和swi prolog :
我已经将unixVariables.sh编辑为包含机器上的java和swi-prolog(pl)可执行文件的路径,并且我的unixVariables.sh如下所示:
# This is a typical environment for Linux, see elsewhere for Mac OS X
JAVA_BIN=/usr/lib/jvm/java-6-sun-1.6.0.16/bin
XSB_BIN_DIRECTORY=/home/YOUR_NAME/XSB271/config
当我使用cygwin终端使用吉他手跟踪SWI代码时,会弹出以下错误:
[PCE fatal: @display/display: Failed to connect to X-server at `': no DISPLAY environment variable
*********************************************************************
* You MUST be running the X11 Windowing environment. If you are, *
* check the setting of
要在python中调用prolog程序,需要使用libary pyswip。
如果给定值的规则为真或假,是否有可能获得信息。如果我在控制台上调用了一个事实,我就会得到。
?-爸爸(A)。是真的。
如果我在python中尝试使用相同的方法:
从pyswip导入Prolog,registerForeign
from pyswip import Prolog
prolog = Prolog()
prolog.assertz("dad(peter)")
for res in prolog.query("dad(peter)."):
print(res)
这是一个Prolog程序,我想检查Linux包之间的依赖关系,以及是否存在冲突。
dep(gnome1,gcc7).
confl(gcc7,gcc8).
% recursive chain dependency
depend(X,Y):- dep(X,Y).
depend(X,Y):- dep(X,Z), depend(Z,Y).
% conflict(X,Y) holds if X and Y depend
on two packages which conflict, conflict between two
packages should be a symmetric relatio
我是prolog编程的新手,在一篇教程中被告知要定义一个结构列表(在脚本中),这样我就可以将其作为数据库进行查询。但是,我发现不可能在脚本中将此列表定义为变量。当我定义一个列表时,比如
X=[a,b,c].
我刚收到一条错误消息
No permission to modify static_procedure `(=)/2'
prolog不支持定义这样的变量吗?我在linux下使用SWI-Prolog。
在我探索记录列表的不同方法的过程中,我对佩雷拉和希伯的“Prolog和自然语言分析”(Prolog and )一书(第42页)中的“Prolog和自然语言分析”(Prolog and )一书中的列表感兴趣。
起初,我认为这样的表示法在语法上是不正确的,因为它必须说是[[a,b]|[c]],但是在使用write_canonical/1之后,Prolog返回了'.'('.'(a,'.'(b,[])),c)。
据我所见,这对应于以下树结构(虽然在我看来,这种结构只是以c结尾,而没有末尾的空列表):
不过,我似乎找不到使用逗号和括号的对应符号。
我花了一些时间学习Prolog,并对Prolog的概念有了一些基本的理解,比如事实、规则、列表。但是仍然很难用Prolog作为解决逻辑问题的工具。例如,以下内容:
Guess the number with following facts:
2741: A digit is right, but it's in the wrong place.
4132: Two digits are right, but it's in the wrong place.
7642: None of the digits are right.
9826: One digit is correc
我试图理解Prolog的精确搜索顺序。在我的大学课程脚本中,跟踪显示了“指针”当前的确切位置。以下是我们的数据库:
a(a, a, b).
a(a, a, c).
a(a, a, d).
a(a, a, e).
a(a, a, f).
那么Prolog的输出应该如下所示:
?- a(a, a, f).
a(a, a, b). fail
a(a, a, c). fail
a(a, a, d). fail
a(a, a, e). fail
a(a, a, f). succ
在这里,我可以准确地看到prolog现在正在搜索的位置,