“Closures are poor man’s objects and vice versa” – What does this mean?

Objects are poor man’s closures. Consider Java. Java is an object-oriented programming language with no language level support for real lexical closures. As a work-around Java programmers use anonymous inner classes that can close over the variables available in lexical scope (provided they’re final). In this sense, objects are poor man’s closures. Closures are poor … Read more

What is ‘Pattern Matching’ in functional languages?

Understanding pattern matching requires explaining three parts: Algebraic data types. What pattern matching is Why its awesome. Algebraic data types in a nutshell ML-like functional languages allow you define simple data types called “disjoint unions” or “algebraic data types”. These data structures are simple containers, and can be recursively defined. For example: type ‘a list … Read more

What is the difference between procedural programming and functional programming? [closed]

A functional language (ideally) allows you to write a mathematical function, i.e. a function that takes n arguments and returns a value. If the program is executed, this function is logically evaluated as needed.1 A procedural language, on the other hand, performs a series of sequential steps. (There’s a way of transforming sequential logic into … Read more

Advantages of stateless programming?

Read Functional Programming in a Nutshell. There are lots of advantages to stateless programming, not least of which is dramatically multithreaded and concurrent code. To put it bluntly, mutable state is enemy of multithreaded code. If values are immutable by default, programmers don’t need to worry about one thread mutating the value of shared state … Read more

What is a Y-combinator? [closed]

A Y-combinator is a “functional” (a function that operates on other functions) that enables recursion, when you can’t refer to the function from within itself. In computer-science theory, it generalizes recursion, abstracting its implementation, and thereby separating it from the actual work of the function in question. The benefit of not needing a compile-time name … Read more