我正在尝试根据事实找到规则,并编写一些示例查询。但是我不能理解其他的查询逻辑。
% parent(X,Y) means that person X is a parent (father or mother) of person Y
parent(alex,julia).
parent(alex,rosa).
parent(lina,julia).
parent(lina,rosa).
parent(romeo,peter).
parent(julia,peter).
parent(rosa,silvia).
parent(oscar,ida).
parent(eva,ida).
paren
当我使用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)
--下面给出的if else表示是否正确?
--我希望if-else语句解释为:
如果等级为NC,课程为CDC,则调用isNCinCDC或
如果成绩为NC,课程为研习班,则调用isNCinCDC或
如果成绩为NC,课程为论文,则调用isNCinCDC或
如果成绩为NC,课程为选修课,则调用isNCinELEC或
如果成绩为NC,课程为实践学校,则调用isNinPS或
如果等级为NC,课程为项目课程,则调用isNinPC
isNCCalc([],[],[]) :-
display('There are no more courses to check for NC').
isN
我想开发一个函数来评估一个列表并找到其中的最小值。我所做的是:
minimum([X],X).
minimum([X|Y],N) :- minimum(X,N), X < N.
minimum([X|Y],N) :- minimum(Y,N), X > N.
但是,第二和第三条规则似乎是错误的,因为它说的是错误的。
我认为这是因为我使用最小值(X,N)递归调用,并且它犯了一个错误,所以我检查了:
minimum([X],X).
minimum([X|Y],N) :- minimum(X,X), X < N.
minimum([X|Y],N) :- minimum(Y,Y),
我试图在Prolog中解决以下难题:
十个单元格编号为0,...,9铭刻一个10位数字,以便每个单元格,例如i,表示数字i在这个数字中出现的总数。找到这个号码。答案是6210001000。
这就是我在Prolog中所写的,但我被困住了,我认为我的ten_digit谓词有问题:
%count: used to count number of occurrence of an element in a list
count(_,[],0).
count(X,[X|T],N) :-
count(X,T,N2),
N is 1 + N2.
count(X,[Y|T],Coun
在我探索记录列表的不同方法的过程中,我对佩雷拉和希伯的“Prolog和自然语言分析”(Prolog and )一书(第42页)中的“Prolog和自然语言分析”(Prolog and )一书中的列表感兴趣。
起初,我认为这样的表示法在语法上是不正确的,因为它必须说是[[a,b]|[c]],但是在使用write_canonical/1之后,Prolog返回了'.'('.'(a,'.'(b,[])),c)。
据我所见,这对应于以下树结构(虽然在我看来,这种结构只是以c结尾,而没有末尾的空列表):
不过,我似乎找不到使用逗号和括号的对应符号。