summaryrefslogtreecommitdiff
path: root/src/lem_interp/interp_lib.lem
diff options
context:
space:
mode:
Diffstat (limited to 'src/lem_interp/interp_lib.lem')
-rw-r--r--src/lem_interp/interp_lib.lem19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem
index b80c3fe7..ceefe421 100644
--- a/src/lem_interp/interp_lib.lem
+++ b/src/lem_interp/interp_lib.lem
@@ -27,20 +27,21 @@ let bool_to_bit b = match b with
| true -> V_lit (L_aux L_one Unknown)
end ;;
-(* XXX always interpret as positive ? *)
-let to_num_dec (V_vector idx false l) =
- V_lit(L_aux (L_num(naturalFromBitSeq (BitSeq Nothing false (map bit_to_bool (reverse l))))) Unknown);;
+(* BitSeq expects LSB first.
+ * By convention, MSB is on the left, so increasing = Big-Endian (MSB0),
+ * hence MSB first.
+ * http://en.wikipedia.org/wiki/Bit_numbering *)
let to_num_inc (V_vector idx true l) =
+ V_lit(L_aux (L_num(naturalFromBitSeq (BitSeq Nothing false (map bit_to_bool (reverse l))))) Unknown);;
+let to_num_dec (V_vector idx false l) =
V_lit(L_aux (L_num(naturalFromBitSeq (BitSeq Nothing false (map bit_to_bool l)))) Unknown);;
-(* XXX not quite sure about list reversal here - what is the convention for
- * V_vector? cf. above too *)
-let to_vec_dec len (V_lit(L_aux (L_num n) ln)) =
- let l = boolListFrombitSeq len (bitSeqFromNatural Nothing n) in
- V_vector 0 false (map bool_to_bit (reverse l)) ;;
let to_vec_inc len (V_lit(L_aux (L_num n) ln)) =
let l = boolListFrombitSeq len (bitSeqFromNatural Nothing n) in
- V_vector 0 true (map bool_to_bit l) ;;
+ V_vector 0 true (map bool_to_bit (reverse l)) ;;
+let to_vec_dec len (V_lit(L_aux (L_num n) ln)) =
+ let l = boolListFrombitSeq len (bitSeqFromNatural Nothing n) in
+ V_vector 0 false (map bool_to_bit l) ;;
let rec add (V_tuple args) = match args with
(* vector case *)