egison 3.5.5 → 3.5.6
raw patch · 4 files changed
+28/−12 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- egison.cabal +1/−1
- hs-src/Language/Egison/Primitives.hs +15/−0
- lib/core/number.egi +8/−11
- lib/core/string.egi +4/−0
egison.cabal view
@@ -1,5 +1,5 @@ Name: egison-Version: 3.5.5+Version: 3.5.6 Synopsis: Programming language with non-linear pattern-matching against unfree data Description: An interpreter for Egison, a **pattern-matching-oriented**, purely functional programming language.
hs-src/Language/Egison/Primitives.hs view
@@ -22,6 +22,7 @@ import qualified Data.Sequence as Sq +import Data.Char (ord, chr) import qualified Data.Text as T import qualified Data.Text.IO as T @@ -141,6 +142,8 @@ , ("itof", integerToFloat) , ("rtof", rationalToFloat)+ , ("ctoi", charToInteger)+ , ("itoc", integerToChar) , ("pack", pack) , ("unpack", unpack)@@ -378,6 +381,18 @@ Integer i -> return $ Float $ fromInteger i Rational r -> return $ Float $ fromRational r _ -> throwError $ TypeMismatch "integer of rational number" (Value val)++charToInteger :: PrimitiveFunc+charToInteger = oneArg $ \val -> do+ case val of+ Char c -> return $ Integer $ fromIntegral $ ord c+ _ -> throwError $ TypeMismatch "character" (Value val)++integerToChar :: PrimitiveFunc+integerToChar = oneArg $ \val -> do+ case val of+ Integer i -> return $ Char $ chr $ fromIntegral i+ _ -> throwError $ TypeMismatch "character" (Value val) floatToIntegerOp :: (Double -> Integer) -> PrimitiveFunc floatToIntegerOp op = oneArg $ \val -> do
lib/core/number.egi view
@@ -124,9 +124,6 @@ ;;; ;;; Decimal Fractions ;;;-(define $decimal (algebraic-data-matcher {<df integer (list integer)>}))-(define $decimal' (algebraic-data-matcher {<df' integer (list integer) (list integer)>}))- (define $rtod-helper (lambda [$m $n] (let {[$q (quotient (* m 10) n)]@@ -134,12 +131,12 @@ {[q r] @(rtod-helper r n)}))) (define $rtod- (lambda [$x]+ (lambda [$c $x] (let* {[$m (numerator x)] [$n (denominator x)] [$q (quotient m n)] [$r (remainder m n)]}- <Df q (map fst (rtod-helper r n))>)))+ [q (take c (map fst (rtod-helper r n)))]))) (define $rtod' (lambda [$x]@@ -148,17 +145,17 @@ [$q (quotient m n)] [$r (remainder m n)] [[$s $c] (find-cycle (rtod-helper r n))]}- <Df' q (map fst s) (map fst c)>)))+ [q (map fst s) (map fst c)]))) (define $show-decimal- (lambda [$n $x]- (match (rtod x) decimal- {[<df $q $sc> (foldl S.append (S.append (show q) ".") (map show (take n sc)))]})))+ (lambda [$c $x]+ (match (rtod c x) [integer (list integer)]+ {[[$q $sc] (foldl S.append (S.append (show q) ".") (map show sc))]}))) (define $show-decimal' (lambda [$x]- (match (rtod' x) decimal'- {[<df' $q $s $c> (foldl S.append "" {(S.append (show q) ".") @(map show s) " " @(map show c) " ..."})]})))+ (match (rtod' x) [integer (list integer) (list integer)]+ {[[$q $s $c] (foldl S.append "" {(S.append (show q) ".") @(map show s) " " @(map show c) " ..."})]}))) ;;; ;;; Continued Fraction
lib/core/string.egi view
@@ -42,6 +42,10 @@ (lambda [$xs] (eq? xs ""))) +(define $S.cons+ (lambda [$x $xs]+ (append-string (pack {x}) xs)))+ (define $S.car (lambda [$xs] (match xs string