Prolog-我可以找到所有使谓词成立的情况吗?

时间:2018-09-08 12:18:06

标签: prolog

如果我有两个这样的规则:

`import pandas as pd`

    data=pd.read_csv("C:\\Users\\hp\\Desktop\\py\\p1.txt",delimiter=',')
    df=pd.DataFrame(data)
    print(df)



  emp_id emp_name  months_worked  total_sal   jan  feb      mar  apr  may  \
0       1      aaa              4        NaN  2000    1      2.0    3  4.0   
1       2      bbb              3        NaN     1    2      NaN    4  5.0   
2       3      bbb              7        NaN     1    2  34343.0    4  NaN   
3       4      bbb             12        NaN     1    2  33434.0    4  5.0   

      jun  jul      aug   sep   oct      nov   dec  
0  5555.0  NaN  74343.0     8     9     10.0   NaN  
1   643.0  7.0      NaN  9343    10  13431.0  12.0  
2  6343.0  7.0      NaN     9  1043     11.0  12.0  
3     NaN  7.0      8.0     9     1      NaN  12.0 

我怎么问-X可能具有哪些属性,所以它是湿的。 在示例中,我想要得到的是:was_in_rain并洗净。

9月12日的澄清:我对找到所有具有湿性的X都不感兴趣。想象没有进一步的规则或事实定义。 我感兴趣的是: 在hasproperty(X,Y)中给我可能的Y,通过序言规则,您可以推断hasproperty(X,wet)。 在给定示例中,结果为Y = was_in_rain和Y = washed

基本上,我想知道是否可以进行查询来分析规则本身。

1 个答案:

答案 0 :(得分:0)

您可以使用findall/3查找谓词的所有解。在这种情况下,看来hasproperty(X, wet)始终为假。

:- initialization(main).

main :-
    findall(X,hasproperty(X,wet),Z),
    writeln(Z). % there are no solutions, so Z is an empty list

hasproperty(X, wet) :- hasproperty(X, was_in_rain).
hasproperty(X, wet) :- hasproperty(X, washed).