Prolog列表,参数和返回值

d0p*_*0pe 2 parameters list prolog

我是prolog的新手,我无法弄清楚这一点.

我正在尝试构建一个简单的程序,它接收一个谓词列表,搜索列表中的特定谓词,并将一个函数应用于该谓词的参数.

这些方面的东西:

?- program([pred1(a,b,p), pred2(d,b,p), pred2 (a,c,p)]). 

program (list1) :- 
search(pred2(X,Y,p),list1).
doSomething (X,Y) % with the X and Y returned from search function, both of them.
Run Code Online (Sandbox Code Playgroud)

基本上,我想使用从目标返回的所有值search(pred2(X,Y,p),list1)并在另一个函数上使用它们.


好的,我在prolog中尝试了一些东西,然后来到这里:

member(X, [X | _]).

member(X, [_ | R]) :- member(X, R).

prog(L1,Out) :- member(pred2(X,Y), L1).

?- prog ([(pred1(a,b),pred2(c,b),pred2(d,a)],Out).
Run Code Online (Sandbox Code Playgroud)

它按照预期给出了2倍,但我想得到Out = [c,b]Out = [d,a].我怎么能做到这一点?

关于Oak的回答:我认为它不是一种过程语言,但我无法弄清楚如何访问值并在prolog中使用它们.你的例子没那么有用.

Oak*_*Oak 7

对于初学者,我会避免将这些东西称为"功能".Prolog不是一种过程语言,规则/谓词不是函数.

基本上,当你使用规则时,你真的在​​问Prolog,"给我所有符合这条规则的价值".该规则本身并不返回任何内容.

所以说你用程序语言有以下内容:

f(g(3))
Run Code Online (Sandbox Code Playgroud)

你会如何在Prolog中做到这一点?您需要编写一些谓词f(X,Y)和一些谓词g(X,Y),然后您需要使用查询f(3,Y), g(Y,Z)- 这意味着要求Prolog找到您的值Y以及Z哪些将满足此要求.Z是你感兴趣的.