learning algorithms using functional programming paradigm