Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回值高于prolog中的数字_Prolog - Fatal编程技术网

返回值高于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)。我该怎么做?删除输入定义中的外部列表。