From 8498fab1dceef7d7392b6cc4a4f8c013979c470c Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Mon, 20 Jan 2025 12:23:30 +0000 Subject: [PATCH] fix bin-vec.sml to store sorted element properly, in order --- fcore/bin-vec.sml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/fcore/bin-vec.sml b/fcore/bin-vec.sml index b3f6925..ee87bcf 100644 --- a/fcore/bin-vec.sml +++ b/fcore/bin-vec.sml @@ -20,6 +20,8 @@ sig val insert: elem vector * elem * int -> elem vector val delete: elem vector * elem -> elem vector val updateAtIdx: elem vector * elem * int -> elem vector + + val fromList: elem list -> elem vector end functor MakeBinVec(Fn: MAKE_BIN_VEC): BIN_VEC = @@ -37,7 +39,7 @@ struct let val curNum = Vector.sub (vec, pos) in - if Fn.g (findNum, curNum) then pos + 1 + if Fn.l (findNum, curNum) then pos else reverseLinearSearch (pos - 1, findNum, vec) end @@ -48,7 +50,7 @@ struct let val curNum = Vector.sub (vec, pos) in - if Fn.g (findNum, curNum) then pos + if Fn.g (findNum, curNum) then pos + 1 else forwardLinearSearch (pos + 1, findNum, vec) end @@ -69,7 +71,7 @@ struct let val curNum = Vector.sub (vec, prevMid) in - if Fn.l (findNum, curNum) then + if Fn.g (findNum, curNum) then forwardLinearSearch (prevMid, findNum, vec) else reverseLinearSearch (prevMid, findNum, vec) @@ -141,6 +143,17 @@ struct fun updateAtIdx (vec, elem, idx) = Vector.mapi (fn (curIdx, curElem) => if curIdx <> idx then curElem else elem) vec + + fun helpFromList ([], acc) = acc + | helpFromList (hd :: tl, acc) = + let + val pos = findInsPos (hd, acc) + val acc = insert (acc, hd, pos) + in + helpFromList (tl, acc) + end + + fun fromList lst = helpFromList (lst, empty) end structure IntSet =