friend(a,b).
friend(b,c).
friend(b,d).
friend(b,e).
realFriends(X,Y) :- friend(X,Y);friend(Y,X).
friendOfFriend(X,Y) :- realFriends(X,Z), realFriends(Z,Y).
当我查询friendOfFriend(a,X).时,我得到:
X = c ;
X = d ;
X = e ;
X = a ;
false.
但是为什么它输出X = a?friendOfFriend(a,a).应该是错误的。
我一直在学习prolog中的递归,它似乎可以工作,但输出的格式非常奇怪;
mins_to_hours(In, H, M):-
In < 60,
H is 0,
M is In.
mins_to_hours(In, H, M):-
In > 59,
H = H1 + 1,
In1 = In - 60,
mins_to_hours(In1, H1, M).
是我的代码,给定查询mins_to_hours(135, H, M).,响应是
H = 0+1+1,
M = 15
我只是搞不懂为什么分钟可以工作,而小时却不行。程序应该把分钟
我很难理解prolog是如何处理列表的。我正在尝试编写一个函数,该函数将向给定列表添加一个尾部,并返回一个新列表。但是我的实现不能工作,我不知道如何修复它。这就是我所拥有的:
% add_tail(L,M,E) :- L is M with [E] appended.
% I wanna do this without using the append predicate
add_tail([E],[],E).
add_tail(List, [H|T], E):-
add_tail(List1, T, E),
List is [H|List1].
为了阐明我希望这个函数做什么
我正在尝试查看以下事实的可能情况。
don likes cain
bob does not like don
cain does not like aron
nobody likes someone who does not like him
aron likes everyone who likes bob
don likes everyone bob likes
everybody likes somebody
我刚刚开始学习prolog,我正在尝试用prolog实现它,看看会出现多少种可能的情况。我在这里浏览了几个prolog线程,我也使用了"“这本书。所以这是我想要的最好的代码
我在理解Prolog中“树”遍历的概念时遇到了困难。
给定一个输入列表,如果存在于叶子中,则以下代码将原子hi替换为bye (忽略函数器)。我将注释%放在让我困惑的部分旁边:
replace([],[]).
replace([H | T], [H1 | T1]):-
( H == hi -> H1 = bye;
replace(H, H1) % P1: What exactly does replace (H,H1) do? I know that
% is saying if H = hi then