Quick actions

cmd+k|ctrl+k

Navigation

Languages

cs320-lab-fold

Snippet info

Language

Haskell

Visibility

public

Author

o1xhack

Created

2016-10-11T20:07:45Z

Updated

2016-10-11T20:07:45Z

myfoldr :: [a] -> b -> (a -> b -> b) -> b
myfoldr [] base _ = base
myfoldr (x:xs) base f = f x (myfoldr xs base f)

myfoldl :: [a] -> b -> (a -> b -> b) -> b
myfoldl [] base _ = base 
myfoldl (x:xs) base f = myfoldl xs (f x base) f

mymap :: [a] -> (a -> b) -> [b]
mymap xs f = myfoldr xs [] (\x -> \y -> (f x) : y)

myfilter :: [a] -> (a -> Bool) -> [a]
myfilter xs f = myfoldr xs [] (\x -> \y -> if f x then x:y else y)

mysplit :: [a] -> Int -> a -> [a]
mysplit xs n s = myfoldr xs [] (\x -> \y -> if (length y >= n) && (length y + 1) `mod` (n + 1) == 0 then x : s : y else x : y)

myperm :: (Eq a) => [a] -> [[a]]
myperm [x] = [[x]]
myperm xs = myfoldr xs [] (\x -> \xss -> (mymap (myperm $ myfilter xs (\m -> m /= x)) (\p -> x:p)) ++ xss)
 
main = 
    do
        print $ myfoldl [1,2,3,4] [] (\x -> \y -> x : y)
        print $ mymap [1,2,3,4] (\x -> x * x)
        print $ myfilter [1,2,3,4] (\x -> x < 3)
        print $ mysplit [1..17] 2 100
        print $ myperm ['a','b','c']
        
       
INFO