bsearch
(X
,Lo
,Hi
,Y
):-Hi
=:=Lo
+1, X
is Lo
.bsearch
(X
,Lo
,Hi
,Y
):-Hi
< Lo
+1, fail.bsearch
(X
,Lo
,Hi
,Y
):-Hi
>= Lo
+1, Mid
is (Lo
+Hi
)//2, f(Mid, Val),
( Val=<Y, bsearch(X,Mid,Hi,Y)
; Val>Y, bsearch(X,Lo,Mid,Y)
).
go
:-bsearch
(X
,1,100,49), nl,nl,print
(X
),nl.
YnNlYXJjaChYLExvLEhpLFkpOi1IaT06PUxvKzEsIFggaXMgTG8uCmJzZWFyY2goWCxMbyxIaSxZKTotSGkgPCBMbysxLCBmYWlsLgpic2VhcmNoKFgsTG8sSGksWSk6LUhpPj0gTG8rMSwgTWlkIGlzIChMbytIaSkvLzIsIAoJCWYoTWlkLCBWYWwpLAoJCSggVmFsPTxZLCBic2VhcmNoKFgsTWlkLEhpLFkpCgkJOyBWYWw+WSwgIGJzZWFyY2goWCxMbyxNaWQsWSkKCQkpLgoKZ286LWJzZWFyY2goWCwxLDEwMCw0OSksIG5sLG5sLHByaW50KFgpLG5sLg==