在第32页的“示例性序言:如何学习,教学和使用”一书中:
检查列表中的所有元素是否都满足某些属性(即一元谓词)。
逻辑程序:
satisfy_property([], _). satisfy_property([X|L], P) :- R=..[P,X],R, satisfy_property(L,P).
beautiful(mary).
beautiful(anne).
beautiful(louise).
执行:
?-satisfy_property([mary, anne, louise], beautiful).
Yes
帮助修改程序逻辑: 如何查看列表中的每个成员?
答案 0 :(得分:0)
大多数Prolog系统为此使用maplist/2
predicate [swi-doc]。
因此我们可以将谓词定义为:
pipes[1]
或者我们可以通过以下方式自己实现谓词:
satisfy_property(L, P) :-
maplist(P, L).
带有call/2
[swi-doc]一个ISO谓词。
答案 1 :(得分:0)
这按您想要的方式工作吗?
satisfy_property([], _).
satisfy_property([X|L], P) :-
var(X),
!,
write("false "),
satisfy_property(L,P).
satisfy_property([X|L], P) :-
R=..[P,X],
R,
write("true "),
satisfy_property(L,P).
satisfy_property([X|L], P) :-
R=..[P,X],
not(R),
write("false "),
satisfy_property(L,P).
beautiful(mary).
beautiful(anne).
beautiful(louise).
?-satisfy_property([mary, tom, TOM, anne, louise], beautiful).
这给了我
true false false true true Yes.