-
Notifications
You must be signed in to change notification settings - Fork 0
/
BFS.pl
82 lines (61 loc) · 2.75 KB
/
BFS.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
:-include('isimler.pl').%pl dpsyaları okuma
:-include('fiiller.pl').
yol(Liste, Sonuc) :-%hedef yolunu yazdırmak için kurallar
yol(Liste,[], Sonuc).
yol([], Rota, Rota).
yol([H|T], RT, RL) :-
yol(T, [H|RT], RL).
iliski2(A,B,C) :- iliski(A,B,C).
iliski2(A,B,C) :- iliski(C,B,A).
solve( Start, Solution) :-%breadthfirst giriş kural(Seçilmemiş ilişkiler için)
breadthfirst( [ [Start] ], Solution).
breadthfirst( [ [Node | Path] |_], [Node | Path] ) :-%bfs recursive kuralını durdurma kuralı(Seçilmemiş ilişkiler için)
goal(Node).
breadthfirst( [ [N | Path] | Paths], Solution) :-%bfs kuralı(Seçilmemiş ilişkiler için)
bagof([M,N|Path],
(iliski2( N,_,M), \+ member( M, [N | Path] ) ), NewPaths),%ilgi iliskileri bulma
append(Paths, NewPaths, Pathsl), !,%ilgili iliskileri path atma
breadthfirst( Pathsl, Solution);
breadthfirst( Paths, Solution).
solve1( Start,R,Solution) :-%breadthfirst giriş kural(Seçilmiş ilişkiler için)
breadthfirst1( [ [Start] ],R,Solution).
breadthfirst1( [ [Node | Path] |_],R ,[Node | Path] ) :-%bfs recursive kuralını durdurma kuralı(Seçilmiş ilişkiler için)
goal(Node).
breadthfirst1( [ [N | Path] | Paths],R ,Solution) :-%bfs kuralı(Seçilmiş ilişkiler için)
bagof([M,N|Path],
((member(Key,R),iliski2( N,Key,M)), \+ member( M, [N | Path] ) ), NewPaths),%ilişkileri seçmek için (member(Key,R),iliski2( N,Key,M)ekstra olarak.
append(Paths, NewPaths, Pathsl), !,
breadthfirst1( Pathsl,R,Solution);
breadthfirst1( Paths,R,Solution).
basla(X, Start,Finish ):-%Kullanıcı ilk bilgileri girdikten sonra çözümlerin dallanması,hedefin belirlenmesi,ilişkilerin yazılması
assert(goal(Finish)),
( X=0 ->%if -else tipindekikural
solve(Start,Cozum),
yol(Cozum,Liste),
write('Liste:'),
write(Liste),nl,
length(Liste,L),
write('Uzunluk:'),
write(L),nl,
retract(goal(Finish))
;write('İstenen iliskiyi yaziniz :'), read(C),
append([],[C],K),
Y is X-1,
loop(Y,K,Start,Finish),%ilişkileri yazmak için döngü
retract(goal(Finish))
).
kullanici() :-%kullanicidan girdi alma
write('kac tane iliski cesidi olsun?(hepsi icin 0 tuslayiniz'),nl,
read(X),
write('hangi kelime ile baslasin'),nl,
read(Y),
write('hangi kelime ile bitsin'),nl,
read(Z),
basla(X,Y,Z).
loop(0,Ste,Start,Finish):-%girilen iliskiler bittiğinde yapılacak fonksiyonun çağrılması
solve1(Start,Ste,Cozum), yol(Cozum,Liste),write('Liste:'),
write(Liste),nl,
length(Liste,L),
write('Uzunluk:'),
write(L).
loop(N,Ste,Start,Finish) :- N>0, write('İstenen iliskiyi yaziniz :'), read(X),append(Ste,[X],P),M is N-1,loop(M,P,Start,Finish).%İliski seçme döngüsü