Binary Tree
Oleh :
Mohamad Firzon Ainur Roziqin (180535632548)
S1 TI’18 OFF B
%Binary tree
%4.01
isTree(nil).
isTree(t(_,nil,nil)) :- !.
isTree(t(_,L,nil)) :- isTree(L).
isTree(t(_,nil,R)) :- isTree(R).
isTree(nil).
true.
Program 2
[trace] ?- isTree(t(a,t(b,nil,nil),nil)).
Keterangan : diambil node diatasnya, dan yang dijalankan baris ke 4 dan di cek nill
yang terakhir sebagai tree di bagian kiri
true .
Program 3
[trace] ?- isTree(t(a,t(b,nil,nil))).
Keterangan : di cek di semua baris apakah node parent memuat 2 node, namun
pada baris ke 4 di program tidak memenuhi karena pada node parents hanya
memiliki 1 anak node sehingga bernilai false
false
b nil
nil Nil
%4.02
cBalTree(0,nil):- !.
distrib(N,N,N,N) :- !.
distrib(A,B,A,B).
distrib(A,B,B,A).
b. Menjalankan Program dan Analisis
Program 1
[trace] ?- cBalTree(0,nil).
true.
Program 2
[trace] ?- cBalTree(2,N).
Call: (13) 2>0 ? creep // dijalankan baris kedua, A=2, B = A-1, C= B//2, maka jika
A> 0 berarti 2>0 sehingga bernilai true
Call: (13) _6912 is 2+ -1 ? creep // dijalankan baris 2 yaitu B=A-1 maka nilai B=1
Call: (13) _6918 is 1//2 ? creep //dijalankan baris 2 B//2 maka hasilnya 1//2,
maka diambil integernya yaitu 0
Exit: (13) 0 is 1//2 ? creep // kembali ke baris pertama, karena nilainya 0 maka
program akan berpindah ke distrib
%4.03
simetris(nil).
simetris(t(_,L,R)) :- mirror(L,R).
mirror(nil, nil).
[trace] ?- simetris(N).
[trace] ?- simetris(N).
N = nil ; //diberi “;” untuk mengulang program ke baris pertama dengan alamat
yang sama
[trace] ?- mirror(C,D).
C = D, D = nil ;
Exit: (12) mirror(t(_7540, nil, nil), t(_7548, nil, nil)) ? creep // disiapkan alamat
untuk variabel D
[trace] ?- construct([1,2],T).
Call: (12) construct([1, 2], _942) ? creep // masuk baris 4 dan menyiapkan alamat untuk variabel T
Call: (13) construct([1, 2], _942, nil) ? creep // set nilai L dan T pada baris ke 4 serta set nill
Call: (14) add(1, nil, _1192) ? creep //nilai L=X jadi dijalankan pada baris pertama
Exit: (14) add(1, nil, t(1, nil, nil)) ? creep // dijalankan baris kedua
Call: (14) construct([2], _942, t(1, nil, nil)) ? creep //dijalankan baris kelima
Call: (15) add(2, t(1, nil, nil), _1200) ? creep // dijalankna baris ke 2
Call: (16) 2@<1 ? creep // nilai X=2, maka dijalankna baris 2 , dan nilai Ro bernilai 1
Redo: (15) add(2, t(1, nil, nil), _1200) ? creep //diulang kembali
Exit: (15) add(2, t(1, nil, nil), t(1, nil, t(2, nil, nil))) ? creep
Call: (15) construct([], _942, t(1, nil, t(2, nil, nil))) ? creep
Exit: (15) construct([], t(1, nil, t(2, nil, nil)), t(1, nil, t(2, nil, nil))) ? creep
Exit: (14) construct([2], t(1, nil, t(2, nil, nil)), t(1, nil, nil)) ? creep
Exit: (13) construct([1, 2], t(1, nil, t(2, nil, nil)), nil) ? creep
Exit: (12) construct([1, 2], t(1, nil, t(2, nil, nil))) ? creep
false.