summaryrefslogtreecommitdiff
path: root/examples/tutorial
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-09-05 18:08:16 +0000
committeraarne <aarne@cs.chalmers.se>2007-09-05 18:08:16 +0000
commit2d86f7a739efe018dc5e710da330d3791675a173 (patch)
tree6c9700d21630635ff74c7bde66b4f16171406217 /examples/tutorial
parentd2a5148708a3f270b058403e573106ed1d309957 (diff)
transfer exx
Diffstat (limited to 'examples/tutorial')
-rw-r--r--examples/tutorial/embedded/Makefile8
-rw-r--r--examples/tutorial/embedded/TransferDef.hs26
-rw-r--r--examples/tutorial/embedded/TransferLoop.hs22
3 files changed, 32 insertions, 24 deletions
diff --git a/examples/tutorial/embedded/Makefile b/examples/tutorial/embedded/Makefile
index 203795b6a..787c75e69 100644
--- a/examples/tutorial/embedded/Makefile
+++ b/examples/tutorial/embedded/Makefile
@@ -4,15 +4,15 @@ gf:
echo "pm | wf math.gfcm" | gf MathEng.gf MathFre.gf
hs: gf
- echo "pg -printer=haskell | wf haskell/GSyntax.hs" | gf math.gfcm
+ echo "pg -printer=haskell | wf GSyntax.hs" | gf math.gfcm
run: hs
- ghc --make -o ./math -ihaskell haskell/Run.hs
+ ghc --make -o ./math TransferLoop.hs
strip math
clean:
- rm -f *.gfc *.gfr haskell/*.o haskell/*.hi
+ rm -f *.gfc *.gfr *.o *.hi
distclean:
- rm -f GSyntax.hs math math.gfcm *.gfc *.gfr haskell/*.o haskell/*.hi
+ rm -f GSyntax.hs math math.gfcm *.gfc *.gfr *.o *.hi
diff --git a/examples/tutorial/embedded/TransferDef.hs b/examples/tutorial/embedded/TransferDef.hs
new file mode 100644
index 000000000..4a86dc949
--- /dev/null
+++ b/examples/tutorial/embedded/TransferDef.hs
@@ -0,0 +1,26 @@
+module TransferDef where
+
+import GF.Embed.EmbedAPI (Tree)
+import GSyntax
+
+transfer :: Tree -> Tree
+transfer = gf . answer . fg
+
+answer :: GQuestion -> GAnswer
+answer p = case p of
+ GOdd x -> test odd x
+ GEven x -> test even x
+ GPrime x -> test prime x
+
+value :: GObject -> Int
+value e = case e of
+ GNumber (GInt i) -> fromInteger i
+
+test :: (Int -> Bool) -> GObject -> GAnswer
+test f x = if f (value x) then GYes else GNo
+
+prime :: Int -> Bool
+prime x = elem x primes where
+ primes = sieve [2 .. x]
+ sieve (p:xs) = p : sieve [ n | n <- xs, n `mod` p > 0 ]
+ sieve [] = []
diff --git a/examples/tutorial/embedded/TransferLoop.hs b/examples/tutorial/embedded/TransferLoop.hs
index 5663a1eb5..07b530f74 100644
--- a/examples/tutorial/embedded/TransferLoop.hs
+++ b/examples/tutorial/embedded/TransferLoop.hs
@@ -1,12 +1,12 @@
module Main where
import GF.Embed.EmbedAPI
-import GSyntax
+import TransferDef (transfer)
main :: IO ()
main = do
gr <- file2grammar "math.gfcm"
- loop (translate answerTree gr)
+ loop (translate transfer gr)
loop :: (String -> String) -> IO ()
loop trans = do
@@ -21,21 +21,3 @@ translate tr gr = unlines . map transLine . lines where
(lg,t:_):_ -> linearize gr lg (tr t)
_ -> "NO PARSE"
-answerTree :: Tree -> Tree
-answerTree = gf . answer . fg
-
-answer :: GQuestion -> GAnswer
-answer p = case p of
- GOdd x -> test odd x
- GEven x -> test even x
- GPrime x -> test prime x
-
-value :: GObject -> Int
-value e = case e of
- GNumber (GInt i) -> fromInteger i
-
-test :: (Int -> Bool) -> GObject -> GAnswer
-test f x = if f (value x) then GYes else GNo
-
-prime :: Int -> Bool
-prime = (< 8) ----