我似乎对 Prolog 中的事实统一有疑问,但无法确认。一切看起来应该可以工作,考虑到 Prolog 的相对稀有性,我已经查找了使用 Prolog 解决逻辑难题的示例,但没有实际效果。
这是一个额外的学分分配,所以我不确定它是否有效,但我真的很难从这里开始
% Names
name(teo).
name(mira).
name(bruno).
name(igor).
%Food
food(sandwich).
food(pie).
food(hamburger).
food(pizza).
%Hobby
hobby(crosswords).
hobby(writing).
hobby(reading).
hobby(photography).
%Shirt Colour
shirt(white).
shirt(yellow).
shirt(blue).
shirt(red).
%Other
girl(mira).
student((Name, Food, Hobby, Shirt)) :-
name(Name), food(Food), hobby(Hobby), shirt(Shirt).
solution(L):-
length(L,4),
L= [student(teo, sandwich,_,_),_,_,_],
member(student(mira, pite, crosswords,_),L),
member(student(girl(GirlName),_,_,white),L),
member(student(bruno,_,_,yellow),L),
member(student(_,hamburger,writing,_),
L= [_, student(_,pie,_,_),_,_],
next(student(_,pie,_,_), student(teo,_,_,_), L),
next(student(bruno,_,_,_), student(_,pizza,_,_), L),
next(student(_,_,_,white), student(_,pizza,_,_), L),
member(student(igor,_,reading,_),L),
next(student(_,_,_,blue), student(girl(GirlName),_,_,_), L).
next(A, B, Ls) :- append(_, [A,B|_], Ls).
next(A, B, Ls) :- append(_, [B,A|_], Ls).
问题是它不会将solution(L)
其视为谓词或规则,而只是一段文本,因此我什至无法测试它是否正确。我最感兴趣的是为什么它甚至不起作用。