Prolog 序言,将事实传递到规则中';s参数列表

Prolog 序言,将事实传递到规则中';s参数列表,prolog,Prolog,假设我有一系列事实: fact(a,1). fact(b,10). fact(c,100). 我希望能够使用这种类型的规则: rule(fact(A,10),fact(c,B)):- write(A), write(B). 您使用事实谓词作为查询,例如 rule :- fact(A,10), fact(c,B), write(A), write(B). 另外:为了更准确地解释你的问题,你需要做如下的事情 rule(P1,P2):- call(P1), call(

假设我有一系列事实:

fact(a,1).
fact(b,10).
fact(c,100).
我希望能够使用这种类型的规则:

rule(fact(A,10),fact(c,B)):-
  write(A),
  write(B).

您使用事实谓词作为查询,例如

rule :-
  fact(A,10),
  fact(c,B),
  write(A),
  write(B).
另外:为了更准确地解释你的问题,你需要做如下的事情

rule(P1,P2):-
  call(P1), call(P2),
  write(A),
  write(B).
但是你需要以某种方式指定关系A-P1和B-P2,我认为用任何简单、有用的方法都做不到

所以也许你想要的是

rule(X,Y) :-
  fact(A,X),
  fact(Y,B),
  write(A),
  write(B).

不清楚你在问什么。你是说我希望能够使用这种类型的规则,但你没有说你希望规则意味着什么或做什么,或者你说的是什么“类型”。根据您的示例规则,您可能不了解Prolog是如何工作的(不清楚您为什么要将
fact/2
术语作为参数传递给谓词)。人们在不知道某件事情是如何工作的情况下经常会问问题。因此,该规则的适用性或不适用性。Prolog提供了write()之类的结构,表面上很简单。有三个事实无可争议地形成良好(或者是正确的?)。剩下的是参数列表和这些规则的收敛性。这件事的原因无关紧要。如果我对第/2条规则的论点列表中的事实应用有误解,那么我希望你能解释一下如何将事实传递给它。是的,但我一点也不清楚你想问什么。事实上,在你的帖子里没有规定任何问题。你只是说,我希望能够使用这种非常模糊的规则。在Prolog中,不能将事实作为参数“传递”@TomasBy给出了一个直接的答案,如果你想要的规则只是用变量
a
B
查询两个事实,并写出结果。尽管通常您会将谓词编写为,
规则(A,B):-fact(A,10),fact(c,B)。
然后调用它:
规则(A,B)
,Prolog将显示
A
B
的解决方案。你不需要写。谢谢你,贝先生。你冷静而深思熟虑地考虑了我的意见,并给出了一个温和(且有用)的回答。很难知道这个回答是否有用,因为还不清楚你想要什么。很有可能,你比以前更加困惑,因为你认为你理解,但你不理解。但这只是我的观点(我没有投票来结束你的问题)。我感觉像是
?-规则(事实(A,10),事实(c,B)),写(A),写(B)。规则(P1,P2):-call(P1),call(P2)。
可能是一个很好的变体,可以包含在您的答案中。@Enigmativity让我困扰的是,建议以这种方式使用
call/1
可能根本不是好的建议,这取决于OP试图实现的目标。我认为上面给出的最后一个解决方案与我认为他们所问的最接近。@潜伏者-是的,我同意。