2
2
3
3
4
4
def find_symbols_in_kb (knowledge_base : list [str ]) -> dict :
5
- '''
6
- '''
5
+ """ """
7
6
inferred = {}
8
7
9
8
for i in range (len (knowledge_base )):
10
- symbols = re .findall (r' [a-zA-Z]' , knowledge_base [i ])
9
+ symbols = re .findall (r" [a-zA-Z]" , knowledge_base [i ])
11
10
for symbol in symbols :
12
11
if symbol not in inferred :
13
12
inferred [symbol ] = False
@@ -16,25 +15,21 @@ def find_symbols_in_kb(knowledge_base: list[str]) -> dict:
16
15
17
16
18
17
def number_of_symbols_in_premise (knowledge_base : list [str ]) -> dict :
19
-
20
- '''
21
- '''
18
+ """ """
22
19
23
20
count = {}
24
21
for clause in knowledge_base :
25
- if ( len (clause ) != 1 ) :
22
+ if len (clause ) != 1 :
26
23
index = clause .find ("=>" )
27
24
premise = clause [:index ]
28
- letters = '' .join (e for e in premise if e .isalpha ())
25
+ letters = "" .join (e for e in premise if e .isalpha ())
29
26
count [premise ] = len (letters )
30
27
31
28
return count
32
29
33
30
34
31
def get_known_facts (knowledge_base : list [str ]) -> list [str ]:
35
-
36
- '''
37
- '''
32
+ """ """
38
33
facts = []
39
34
for clause in knowledge_base :
40
35
if len (clause ) == 1 :
@@ -43,17 +38,15 @@ def get_known_facts(knowledge_base: list[str]) -> list[str]:
43
38
return facts
44
39
45
40
46
-
47
-
48
- def forward_chianing (knowledge_base : list [str ], query :str ) -> bool :
49
-
41
+ def forward_chianing (knowledge_base : list [str ], query : str ) -> bool :
50
42
count = number_of_symbols_in_premise (knowledge_base )
51
43
inferred = find_symbols_in_kb (knowledge_base )
52
44
queue = get_known_facts (knowledge_base )
53
45
54
- while ( len (queue ) > 0 ) :
46
+ while len (queue ) > 0 :
55
47
p = queue .pop ()
56
- if p == query : return True
48
+ if p == query :
49
+ return True
57
50
if inferred [p ] == False :
58
51
inferred [p ] = True
59
52
for clause in knowledge_base :
@@ -67,10 +60,22 @@ def forward_chianing(knowledge_base: list[str], query:str) -> bool:
67
60
return False
68
61
69
62
70
-
71
63
if __name__ == "__main__" :
72
-
73
- kb = ["p => q" , "q => r" , "r => p" , "s => t" , "u => v" , "v => w" , "w => u" , "a" , "b" , "c" , "w" , "u&q=>r" , "q" ]
64
+ kb = [
65
+ "p => q" ,
66
+ "q => r" ,
67
+ "r => p" ,
68
+ "s => t" ,
69
+ "u => v" ,
70
+ "v => w" ,
71
+ "w => u" ,
72
+ "a" ,
73
+ "b" ,
74
+ "c" ,
75
+ "w" ,
76
+ "u&q=>r" ,
77
+ "q" ,
78
+ ]
74
79
75
80
result = forward_chianing (kb , "p" )
76
- print (result )
81
+ print (result )
0 commit comments