From ba03db58a4ae2ad4defa227c0bcf3bc2dd125a88 Mon Sep 17 00:00:00 2001 From: hallgren Date: Tue, 23 Aug 2011 16:25:00 +0000 Subject: pgf-service: add Jordis transfer function for OpenMath LaTeX output --- src/server/transfer/Fold.hs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/server/transfer/Fold.hs (limited to 'src/server/transfer') diff --git a/src/server/transfer/Fold.hs b/src/server/transfer/Fold.hs new file mode 100644 index 000000000..61f0d4b34 --- /dev/null +++ b/src/server/transfer/Fold.hs @@ -0,0 +1,26 @@ +module Fold where +import PGF +import Data.Map as M (lookup, fromList) + +--import Debug.Trace + + +foldable = fromList [(mkCId c, mkCId ("bin_" ++ c)) | c <- ops] + where ops = words "plus times and or xor cartesian_product intersect union" + +fold :: Tree -> Tree +fold t = + case unApp t of + Just (i,[x]) -> + case M.lookup i foldable of + Just j -> appFold j x + _ -> mkApp i [fold x] + Just (i,xs) -> mkApp i $ map fold xs + _ -> t + +appFold :: CId -> Tree -> Tree +appFold j t = + case unApp t of + Just (i,[t,ts]) | isPre i "Cons" -> mkApp j [fold t, appFold j ts] + Just (i,[t,s]) | isPre i "Base" -> mkApp j [fold t, fold s] + where isPre i s = take 4 (show i) == s \ No newline at end of file -- cgit v1.2.3