summaryrefslogtreecommitdiff
path: root/week5/camil/Origami.icl
blob: 74362a9f335e246b8cfdbdc74f3137c1538ab81e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module Origami

import StdEnv

Start			= and
				  [ sum`       [1 .. 5]                 == sum       [1 .. 5]
				  , prod`      [1 .. 5]                 == prod      [1 .. 5]
				  , flatten`   [[],[1],[1,2],[1,2,3]]   == flatten   [[],[1],[1,2],[1,2,3]]
				  , reverse`   [1 .. 5]                 == reverse   [1 .. 5]
				  , takeWhile` ((<>) 0) [1,2,3,0,4,5,6] == takeWhile ((<>) 0) [1,2,3,0,4,5,6]
				  , maxList`   [1 .. 5]                 == maxList   [1 .. 5]
				  ]

sum`			= foldr (+) 0
prod`			= foldr (*) 1
flatten`		= foldr (++) []
length`			= foldl (\l e = l + 1) 0
reverse`		= foldl (\xs x = [x:xs]) []
takeWhile` _ [] 	= []
takeWhile` p xs
	| p (xs!!0)	= take (maxList [i \\ i <- [0..length xs-1] | foldr (&&) True [p (xs!!j) \\ j <- [0..i]]] + 1) xs
	| otherwise	= []
maxList` []		= undef
maxList` [x:xs]		= foldr max x xs