所以univ运营商.我并不完全理解.
例如:
foo(PredList,[H|_]) :- bar(PredList,H).
foo(PredList,[_|T]) :- foo(PredList,T),!.
bar([H|_],Item) :- G =.. [H,Item],G.
bar([_|T],Item) :- bar(T,Item).
Run Code Online (Sandbox Code Playgroud)
这是做什么的?这样可以查看另一个谓词是否为真.我不明白".."的作用.
如果没有univ运算符,你会如何重写它?
如果我在 Prolog 中有一个谓词列表,例如[flies, swims],我如何构建一个谓词,它是列表中所有谓词的合取,即fliesAndSwims(X) :- flies(X), swims(X).?
或者,是否有一种更好的方法可以像这样在运行时构建谓词,而无需将组件谓词放入列表中并在需要时从中构建复合谓词?
编辑:所以事实证明这是Prolog 中谓词列表的重复。我之前已经找到了这个答案,但我认为它只返回给定原子是否与列表中的每个谓词匹配。我没有意识到你可以传递一个变量而不是一个原子,并让它返回每个匹配的情况。