$30 off During Our Annual Pro Sale. View Details »

Defining filter using (a) recursion (b) folding (c) folding with S, B and I combinators (d) folding with applicative functor and identity function

Defining filter using (a) recursion (b) folding (c) folding with S, B and I combinators (d) folding with applicative functor and identity function

Defining filter using
(a) recursion
(b) folding
(c) folding with S, B and I combinators
(d) folding with applicative functor and identity function

Keywords: applicative functor, combinatorial logic, combinators, filter, fold, foldr, foldright, functional programming, haskell curry, raymond smullyan, recursion

Philip Schwarz
PRO

May 28, 2022
Tweet

More Decks by Philip Schwarz

Other Decks in Programming

Transcript

  1. filter :: (a -> Bool) -> [a] -> [a]
    filter _ [] = []
    filter p (x:xs) = if (p x) then x:(filter p xs) else filter p xs
    -- Haskell Curry's combinators S, B and I
    s f g x = f x (g x)
    b f g x = f (g x)
    i x = x
    -- Raymond Smullyan's combinator bird names
    starling = s
    blueBird = b
    idiot = i
    -- returns x when c is False
    -- and y when c is True
    bool x y c = if c
    then y
    else x
    -- Alternative combinator names
    distributor = s
    compositor = b
    identity = i
    filter p = foldr (s (b (bool i) (:)) p) []
    filter p = foldr (starling (blueBird (bool idiot) (:)) p) []
    filter p = foldr (distributor (compositor (bool identity) (:)) p) []
    filter p = foldr ((<*>) ((.) (bool id) (:)) p) []
    filter p = foldr (((bool id) . (:)) <*> p) []
    filter p = foldr (bool id . (:) <*> p) []
    recursive definition
    folding with combinators
    Curry’s combinator names
    Smullyan’s combinator names
    Alternative combinator names
    prefix function invocation
    infix function invocation
    no superfluous parentheses
    folding with applicative functor
    and identity function
    filter p = foldr (\x -> if p x then (:) x else id) []
    folding

    View Slide