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中使用它们.你的例子没那么有用.
对于初学者,我会避免将这些东西称为"功能".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是你感兴趣的.