summaryrefslogtreecommitdiff
path: root/book/examples/chapter6/Aggregation.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2010-11-22 12:55:37 +0000
committeraarne <aarne@chalmers.se>2010-11-22 12:55:37 +0000
commit76ba03b545600054176612201de78dca16eb65e1 (patch)
tree5615286b239bee637b32465e9cbf36807ab2c318 /book/examples/chapter6/Aggregation.gf
parent0bf41793694e8b3101d09e34858eba8ab2c8c5b6 (diff)
started a subdir for the book
Diffstat (limited to 'book/examples/chapter6/Aggregation.gf')
-rw-r--r--book/examples/chapter6/Aggregation.gf33
1 files changed, 33 insertions, 0 deletions
diff --git a/book/examples/chapter6/Aggregation.gf b/book/examples/chapter6/Aggregation.gf
new file mode 100644
index 000000000..28cbd39ef
--- /dev/null
+++ b/book/examples/chapter6/Aggregation.gf
@@ -0,0 +1,33 @@
+abstract Aggregation = {
+ cat S ; NP ; VP ;
+ data
+ PredVP : NP -> VP -> S ;
+ ConjS : S -> S -> S ;
+ ConjVP : VP -> VP -> VP ;
+ ConjNP : NP -> NP -> NP ;
+ Run, Walk : VP ;
+ John, Mary : NP ;
+
+ fun aggr : S -> S ; -- main aggregation function
+ def aggr (ConjS (PredVP x X) (PredVP y Y)) =
+ ifS (eqNP x y)
+ (PredVP x (ConjVP X Y))
+ (ifS (eqVP X Y)
+ (PredVP (ConjNP x y) X)
+ (ConjS (PredVP x X) (PredVP y Y))) ;
+ fun ifS : Bool -> S -> S -> S ; -- if b then x else y
+ def
+ ifS True x _ = x ;
+ ifS False _ y = y ;
+ fun eqNP : NP -> NP -> Bool ; -- x == y
+ def
+ eqNP John John = True ;
+ eqNP Mary Mary = True ;
+ eqNP _ _ = False ;
+ fun eqVP : VP -> VP -> Bool ; -- X == Y
+ def
+ eqVP Run Run = True ;
+ eqVP Walk Walk = True ;
+ eqVP _ _ = False ;
+ cat Bool ; data True, False : Bool ;
+}