返回值高于prolog中的数字
使用此格式的知识库:返回值高于prolog中的数字,prolog,Prolog,使用此格式的知识库: input([[m, 0.88], [h, 0.92], [l, 0.96], [m, 1.00], [v, 0.55], [v, 0.61], [v, 0.96]]). 我想知道元素4和6的字母是什么,其中5和7的数字大于0.8 我尝试运行此查询: input(_,_,_,[X,_],[_,S],[Y,_],[_,Z]),S>0.8, Z>0.8. 我得到了错误 proc
input([[m, 0.88],
[h, 0.92],
[l, 0.96],
[m, 1.00],
[v, 0.55],
[v, 0.61],
[v, 0.96]]).
我想知道元素4和6的字母是什么,其中5和7的数字大于0.8
我尝试运行此查询:
input(_,_,_,[X,_],[_,S],[Y,_],[_,Z]),S>0.8, Z>0.8.
我得到了错误
procedure input(A,B,C,D,E,F,G)' does not exist
如何解决此问题?您只有一个参数是列表列表-请尝试以下查询:
?- input(X).
X = [[m, 0.88], [h, 0.92], [l, 0.96], [m, 1.0], [v, 0.55], [v, 0.61], [v, 0.96]]
您可以在头部放置一个包含七个元素的列表,而不是X
,以进行模式匹配:
?- input([A,B,C,D,E,F,G]).
A = [m, 0.88],
B = [h, 0.92],
C = [l, 0.96],
D = [m, 1.0],
E = [v, 0.55],
F = [v, 0.61],
G = [v, 0.96].
如果您不知道哪些元素满足您的需求,您可能希望使用递归,将空列表作为基本情况,并使用两种递归情况:
extract([], []).
extract([[Name,Value] | Xs], [Name| Ns]) :-
Value > 0.8 ,
extract(Xs, Ns).
extract([[_,Value] | Xs], Ns) :-
Value =< 0.8 ,
extract(Xs, Ns).
只有一个参数是列表列表-请尝试以下查询:
?- input(X).
X = [[m, 0.88], [h, 0.92], [l, 0.96], [m, 1.0], [v, 0.55], [v, 0.61], [v, 0.96]]
您可以在头部放置一个包含七个元素的列表,而不是X
,以进行模式匹配:
?- input([A,B,C,D,E,F,G]).
A = [m, 0.88],
B = [h, 0.92],
C = [l, 0.96],
D = [m, 1.0],
E = [v, 0.55],
F = [v, 0.61],
G = [v, 0.96].
如果您不知道哪些元素满足您的需求,您可能希望使用递归,将空列表作为基本情况,并使用两种递归情况:
extract([], []).
extract([[Name,Value] | Xs], [Name| Ns]) :-
Value > 0.8 ,
extract(Xs, Ns).
extract([[_,Value] | Xs], Ns) :-
Value =< 0.8 ,
extract(Xs, Ns).
谢谢你的解释。我需要什么查询才能从列表的第5和第7个元素中获取字母?此外,我需要将此函数应用于表单输入中的20个不同事实(c1、c2、c3、c4、c5、c6、c7)。我该怎么做?删除输入定义中的外部列表。感谢您的解释。我需要什么查询才能从列表的第5和第7个元素中获取字母?此外,我需要将此函数应用于表单输入中的20个不同事实(c1、c2、c3、c4、c5、c6、c7)。我该怎么做?删除输入定义中的外部列表。