diff --git a/fcore/bin-search.sml b/fcore/bin-search.sml new file mode 100644 index 0000000..c752672 --- /dev/null +++ b/fcore/bin-search.sml @@ -0,0 +1,23 @@ +structure BinSearch = +struct + local + fun helpFind (findNum, vec, low, high) = + if high >= low then + let + val mid = low + ((high - low) div 2) + val curNum = Vector.sub (vec, mid) + in + if curNum = findNum then + mid + else if curNum < findNum then + helpFind (findNum, vec, mid + 1, high) + else + helpFind (findNum, vec, low, mid - 1) + end + else + ~1 + in + fun find (findNum, vec) = + helpFind (findNum, vec, 0, Vector.length vec - 1) + end +end diff --git a/oms.mlb b/oms.mlb index 54ec3af..6c0ccdd 100644 --- a/oms.mlb +++ b/oms.mlb @@ -2,6 +2,7 @@ $(SML_LIB)/basis/basis.mlb (* fcore *) fcore/quad-tree.sml +fcore/bin-search.sml ann "allowVectorExps true"