rosetta/binary_search.bruijn

Problem description

:import std/Combinator .
:import std/List .
:import std/Math .
:import std/Option .

binary-search [y [[[[[2 <? 3 none go]]]]] (+0) --(∀0) 0]
	go [compare-case eq lt gt (2 !! 0) 1] /²(3 + 2)
		eq some 0
		lt 5 4 --0 2 1
		gt 5 ++0 3 2 1

# example using sorted list of x^3, x=[-50,50]
find [[map-or "not found" [0 : (1 !! 0)] (binary-search 0 1)] lst]
	lst take (+100) ((\pow (+3)) <$> (iterate ++‣ (-50)))

:test (find (+100)) ("not found")
:test ((head (find (+125))) =? (+55)) ([[1]])
:test ((head (find (+117649))) =? (+99)) ([[1]])

main [[0]]