diff options
Diffstat (limited to 'src/lem_interp/interp_lib.lem')
| -rw-r--r-- | src/lem_interp/interp_lib.lem | 19 |
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 *) |
