From 379b6353396ca2401241d714733d570629835ffe Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Fri, 6 Feb 2015 08:39:37 +0100 Subject: added practicum files, updated gitignore --- .../StdGameTree_en_StdRoseTree/StdRoseTree.icl | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 files/practicum/StdGameTree_en_StdRoseTree/StdRoseTree.icl (limited to 'files/practicum/StdGameTree_en_StdRoseTree/StdRoseTree.icl') diff --git a/files/practicum/StdGameTree_en_StdRoseTree/StdRoseTree.icl b/files/practicum/StdGameTree_en_StdRoseTree/StdRoseTree.icl new file mode 100644 index 0000000..ddefbca --- /dev/null +++ b/files/practicum/StdGameTree_en_StdRoseTree/StdRoseTree.icl @@ -0,0 +1,38 @@ +implementation module StdRoseTree + +/** This module defines rose trees. +*/ +import StdEnv + +root :: !(RoseTree a) -> a +root (Node r _) = r + +children :: !(RoseTree a) -> [RoseTree a] +children (Node _ ts) = ts + +depth :: !(RoseTree a) -> Int +depth (Node _ []) = 1 +depth (Node _ xs) = 1 + maxList (map depth xs) + +prunetree :: !PruneDepth !(RoseTree a) -> RoseTree a +prunetree d (Node x ts) +| d <= 1 = Node x [] +| otherwise = Node x (map (prunetree (d-1)) ts) + +bonsai :: !(RoseTree a) -> RoseTree a | Eq a +bonsai t = bonsai` [] t +where + bonsai` :: ![a] !(RoseTree a) -> RoseTree a | Eq a + bonsai` path (Node v ts) = Node v (filter (\t -> not (isMember (root t) [v:path])) + (map (bonsai` [v:path]) ts) + ) + +iteratetree :: !(Children a) a -> RoseTree a +iteratetree f s = Node s (map (iteratetree f) (f s)) + +maptree :: (a -> b) !(RoseTree a) -> RoseTree b +maptree f (Node x ts) = Node (f x) (map (maptree f) ts) + +paths :: !(RoseTree a) -> [[a]] +paths (Node x []) = [[x]] +paths (Node x ts) = [[x:path] \\ t <- ts, path <- paths t] -- cgit v1.2.3