在我探索记录列表的不同方法的过程中,我对佩雷拉和希伯的“Prolog和自然语言分析”(Prolog and )一书(第42页)中的“Prolog和自然语言分析”(Prolog and )一书中的列表感兴趣。
起初,我认为这样的表示法在语法上是不正确的,因为它必须说是[[a,b]|[c]],但是在使用write_canonical/1之后,Prolog返回了'.'('.'(a,'.'(b,[])),c)。
据我所见,这对应于以下树结构(虽然在我看来,这种结构只是以c结尾,而没有末尾的空列表):
不过,我似乎找不到使用逗号和括号的对应符号。
要在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程序,找出数字列表中的最大值。”
我已经使用互联网的力量来帮助找到一个有效的解决方案,但我想对程序本身有一个了解。
max_num([X],X).
max_num([X|Y],X):- max_num(Y,Z), X >= Z.
max_num([X|Y],A):- max_num(Y,A), A > X.
Line1:
max_num([X],X).
我知道Line1正在定义问题的基本模板。X定义列表,另一个X表示该列表中的最大值。
Line2:
max_num([X|Y],X):- max_num(Y,Z), X >= Z.
这就
因此,我有一个prolog谓词,例如是这样的:
getSomething([Head|Tail],List,MaxV,MaxK,BestThing) :-
%I call other functions that work just fine
makeaverage(List,Med),
compare(Med,MaxV,Comp),
(Comp < MaxK,
getSomething(Tail,List,MaxV,Comp,Head);
getSome
我正在尝试查看列表列表,如果指定的值在给定行中出现两次,则返回true。例如:
%B is a list of lists such the positions of x are denoted by the values
[[1,1],[2,3],[3,2]] would be visualized like:
x--
--x
-x-
这些坐标将由B表示,因此一个方法foo(B),其中B=
[[1,1],[1,3],[2,3],[3,3]] = true
因为x将在第一行中出现两次。