Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- myFoldl :: (a -> b -> a) -> a -> [b] -> a
- myFoldl f z xs = foldr step id xs z
- where step x g a = g (f a x)
- zip2 xs ys = foldr step done xs ys
- where done ys = []
- step x zipsfn [] = []
- step x zipsfn (y:ys) = (x, y) : (zipsfn ys)
- zip2 xs ys = foldr step done xs ys
- zip2 = foldr step done
- myzip = foldr step (const []) :: [a] -> [b] -> [(a,b)]
- where step a f (b:bs) = (a,b):(f bs)
- step a f [] = []
- > (define (zip lista listb)
- ((foldr (lambda (el func)
- (lambda (a)
- (if (empty? a)
- empty
- (cons (cons el (first a)) (func (rest a))))))
- (lambda (a) empty)
- lista) listb))
- > (zip '(1 2 3 4) '(5 6 7 8))
- (list (cons 1 5) (cons 2 6) (cons 3 7) (cons 4 8))
- el->3, func->(lambda (a) empty)
- (lambda (a) (cons (cons el (first a)) (func (rest a))))
- (lambda (a) (cons (cons 3 (first a)) ((lambda (a) empty) (rest a))))
- > (define f (lambda (a) (cons (cons 3 (first a)) ((lambda (a) empty) (rest a)))))
- > (f (list 9))
- (list (cons 3 9))
- el->3, func->f ;using f for shorthand
- (lambda (a) (cons (cons el (first a)) (func (rest a))))
- (lambda (a) (cons (cons 2 (first a)) (f (rest a))))
- > (define g (lambda (a) (cons (cons 2 (first a)) (f (rest a)))))
- > (g (list 9 1))
- (list (cons 2 9) (cons 3 1))
- (lambda (a) (cons (cons 2 (first a)) (f (rest a))))
- (cons (cons 2 (first (list 9 1))) (f (rest (list 9 1))))
- (cons (cons 2 9) (f (list 1)))
Add Comment
Please, Sign In to add comment