From bb17db68f38c9a91ec4b12c664e0464efd5e9ccc Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 7 Nov 2016 22:18:43 +0000 Subject: Adapted acker and e to be standalone --- acker.icl | 12 +++++++++++- e.icl | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/acker.icl b/acker.icl index 675c47c..dc2b044 100644 --- a/acker.icl +++ b/acker.icl @@ -2,7 +2,17 @@ module acker // The Ackermann function. -import StdInt +//import StdInt + +(+) infixl 6 :: !Int !Int -> Int +(+) a b = code inline { + addI +} + +(-) infixl 6 :: !Int !Int -> Int +(-) a b = code inline { + subI +} Acker::Int Int -> Int Acker 0 j = j + 1 diff --git a/e.icl b/e.icl index 32c8333..e9b4207 100644 --- a/e.icl +++ b/e.icl @@ -6,7 +6,52 @@ Approximation of the number e. Result: A list containing the first NrDigits digits of e = [2,7,1,8,2,8,1,8,2,8,...]. */ -import StdEnv +(<) infix 4 :: !Int !Int -> Bool +(<) a b = code inline { + ltI +} + +(+) infixl 6 :: !Int !Int -> Int +(+) a b = code inline { + addI +} + +(-) infixl 6 :: !Int !Int -> Int +(-) a b = code inline { + subI +} + +(*) infixl 7 :: !Int !Int -> Int +(*) a b = code inline { + mulI +} + +(/) infixl 7 :: !Int !Int -> Int +(/) a b = code inline { + divI +} + +(==) infix 4 :: !Int !Int -> Bool +(==) a b = code inline { + eqI +} + +(rem) infix 7 :: !Int !Int -> Int +(rem) a b = code inline { + remI +} + +take :: Int [a] -> [a] +take 0 _ = [] +take n [x:xs] = [x:take (n-1) xs] + +hd :: [a] -> a +hd [x:xs] = x + +tl :: [a] -> [a] +tl [_:xs] = xs + +//import StdEnv NrDigits :== 200 // The number of digits of the approximation of e @@ -26,7 +71,7 @@ Expan f = [hd ten:Expan (tl ten)] Ten::Int [Int] -> [Int] Ten c [p:q] | Safe k c = [k / c, k rem c + a1 : b1] = [(k + a1) / c, (k + a1) rem c : b1] - where + where a1 = hd ten b1 = tl ten ten = Ten (c+1) q @@ -40,6 +85,6 @@ The Start rule returns the first NrDigits elements of the list of digits returned by the function 'Approx_e' by means of the function take. */ - + Start::[Int] Start = take NrDigits Approx_e -- cgit v1.2.3