SlideShare a Scribd company logo
Functional
Programming
You
Already
Know
@KevlinHenney
Functional Programming You Already Know
Functional Programming You Already Know
Functional Programming You Already Know
Functional Programming You Already Know
functional
programming
higher-order functions
recursion
statelessness
first-class functions
immutability
pure functions
unification
declarative
pattern matching
non-strict evaluation
idempotence
lists
mathematics
lambdas
currying
monads
Excel is the world's
most popular
functional language.
Simon Peyton Jones
To iterate is human,
to recurse divine.
L Peter Deutsch
int factorial(int n)
{
int result = 1;
while(n > 1)
result *= n--;
return result;
}
int factorial(int n)
{
if(n > 1)
return n * factorial(n - 1);
else
return 1;
}
int factorial(int n)
{
return
n > 1
? n * factorial(n - 1)
: 1;
}
n! =
1
(n – 1)!  n
if n = 0,
if n > 0.{
n! =
n
k = 1
k
seriesProduct(k, k, 1, n)
Functional Programming You Already Know
Functional Programming You Already Know
#include <stdio.h>
/* printd: print n in decimal */
void printd(int n)
{
if (n < 0) {
putchar('-');
n = -n;
}
if (n / 10)
printd(n / 10);
putchar(n % 10 + '0');
}
Functional Programming You Already Know
/* grep: search for regexp in file */
int grep(char *regexp, FILE *f, char *name)
{
int n, nmatch;
char buf[BUFSIZ];
nmatch = 0;
while (fgets(buf, sizeof buf, f) != NULL) {
n = strlen(buf);
if (n > 0 && buf[n-1] == 'n')
buf[n-1] = '0';
if (match(regexp, buf)) {
nmatch++;
if (name != NULL)
printf("%s:", name);
printf("%sn", buf);
}
}
return nmatch;
}
/* matchhere: search for regexp at beginning of text */
int matchhere(char *regexp, char *text)
{
if (regexp[0] == '0')
return 1;
if (regexp[1] == '*')
return matchstar(regexp[0], regexp+2, text);
if (regexp[0] == '$' && regexp[1] == '0')
return *text == '0';
if (*text!='0' && (regexp[0]=='.' || regexp[0]==*text))
return matchhere(regexp+1, text+1);
return 0;
}
/* match: search for regexp anywhere in text */
int match(char *regexp, char *text)
{
if (regexp[0] == '^')
return matchhere(regexp+1, text);
do { /* must look even if string is empty */
if (matchhere(regexp, text))
return 1;
} while (*text++ != '0');
return 0;
}
/* matchstar: search for c*regexp at beginning of text */
int matchstar(int c, char *regexp, char *text)
{
do { /* a * matches zero or more instances */
if (matchhere(regexp, text))
return 1;
} while (*text != '0' && (*text++ == c || c == '.'));
return 0;
}
Functional Programming You Already Know
http://www.adampetersen.se/articles/fizzbuzz.htm
http://www.adampetersen.se/articles/fizzbuzz.htm
int atexit(void (*func)(void));
void qsort(
void *base,
size_t nmemb, size_t size,
int (*compar)(
const void *, const void *));
void (*signal(
int sig, void (*func)(int)))(int);
Functional Programming You Already Know
One of the most powerful mechanisms
for program structuring [...] is the block
and procedure concept.
A procedure which is capable of giving
rise to block instances which survive its
call will be known as a class; and the
instances will be known as objects of
that class.
A call of a class generates a new object
of that class.
Ole-Johan Dahl and C A R Hoare
"Hierarchical Program Structures"
public class HeatingSystem {
public void turnOn() 
public void turnOff() 

}
public class Timer {
public Timer(TimeOfDay toExpire, Runnable toDo) 
public void run() 
public void cancel() 

}
Timer on =
new Timer(
timeToTurnOn,
new Runnable() {
public void run() {
heatingSystem.turnOn();
}
});
Timer off =
new Timer(
timeToTurnOff,
new Runnable() {
public void run() {
heatingSystem.turnOff();
}
});
class Timer
{
public:
Timer(TimeOfDay toExpire, function<void()> toDo);
void run();
void cancel();
...
};
Timer on(
timeOn,
bind(&HeatingSystem::turnOn, &heatingSystem));
Timer off(
timeOff,
bind(&HeatingSystem::turnOff, &heatingSystem));
public class Timer
{
public Timer(TimeOfDay toExpire, Action toDo) ...
public void Run() ...
public void Cancel() ...
...
}
Timer on = new Timer(timeOn, heatingSystem.TurnOn);
Timer off = new Timer(timeOff, heatingSystem.TurnOff);
Timer on =
new Timer(timeOn, () => heatingSystem.TurnOn());
Timer off =
new Timer(timeOff, () => heatingSystem.TurnOff());
William Cook, "On Understanding Data Abstraction, Revisited"
newStack =
  (let items = ref() 
{
isEmpty =   #items = 0,
depth =   #items,
push =  x  items := xˆitemsy  y  0...#items,
top =   items0
})
var newStack = function() {
var items = []
return {
isEmpty: function() {
return items.length === 0
},
depth: function() {
return items.length
},
push: function(newTop) {
items = items.unshift(newTop)
},
top: function() {
return items[0]
}
}
}
intension, n. (Logic)
 the set of characteristics or properties by which
the referent or referents of a given expression is
determined; the sense of an expression that
determines its reference in every possible world,
as opposed to its actual reference. For example,
the intension of prime number may be having
non-trivial integral factors, whereas its extension
would be the set {2, 3, 5, 7, ...}.
E J Borowski and J M Borwein
Dictionary of Mathematics
A list comprehension is a syntactic
construct available in some programming
languages for creating a list based on
existing lists. It follows the form of the
mathematical set-builder notation (set
comprehension) as distinct from the use of
map and filter functions.
http://en.wikipedia.org/wiki/List_comprehension
{ 2  x | x  , x > 0 }
(2 * x for x in count() if x > 0)
{ x | x  , x > 0  x mod 2 = 0 }
(x for x in count() if x > 0 and x % 2 == 0)
Functional Programming You Already Know
Concatenative programming is so called
because it uses function composition instead of
function application—a non-concatenative
language is thus called applicative.
Jon Purdy
http://evincarofautumn.blogspot.in/2012/02/
why-concatenative-programming-matters.html
f(g(h(x)))
(f ○ g ○ h)(x)
x h g f
h | g | f
This is the basic reason Unix pipes are so
powerful: they form a rudimentary string-based
concatenative programming language.
Jon Purdy
http://evincarofautumn.blogspot.in/2012/02/
why-concatenative-programming-matters.html
Functional Programming You Already Know
find . -name "*.java" |
sed 's/.*///' |
sort |
uniq -c |
grep -v "^ *1 " |
sort -r
Heinz Kabutz
"Know Your IDE"
97 Things Every Programmer Should Know
Concurrency
Concurrency
Threads
Concurrency
Threads
Locks
Some people, when confronted with a
problem, think, "I know, I'll use threads,"
and then two they hav erpoblesms.
Ned Batchelder
https://twitter.com/nedbat/status/194873829825327104
public final class Date implements ... {
...
public int getYear() ...
public int getMonth() ...
public int getDayInMonth() ...
public void setYear(int newYear) ...
public void setMonth(int newMonth) ...
public void setDayInMonth(int newDayInMonth) ...
...
}
public final class Date implements ... {
...
public int getYear() ...
public int getMonth() ...
public int getWeekInYear() ...
public int getDayInYear() ...
public int getDayInMonth() ...
public int getDayInWeek() ...
public void setYear(int newYear) ...
public void setMonth(int newMonth) ...
public void setWeekInYear(int newWeek) ...
public void setDayInYear(int newDayInYear) ...
public void setDayInMonth(int newDayInMonth) ...
public void setDayInWeek(int newDayInWeek) ...
...
}
public final class Date implements ... {
...
public int getYear() ...
public int getMonth() ...
public int getWeekInYear() ...
public int getDayInYear() ...
public int getDayInMonth() ...
public int getDayInWeek() ...
...
}
When it is not
necessary to
change, it is
necessary not to
change.
Lucius Cary
public final class Date implements ... {
...
public int getYear() ...
public int getMonth() ...
public int getWeekInYear() ...
public int getDayInYear() ...
public int getDayInMonth() ...
public int getDayInWeek() ...
...
}
public final class Date implements ... {
...
public int year() ...
public int month() ...
public int weekInYear() ...
public int dayInYear() ...
public int dayInMonth() ...
public int dayInWeek() ...
...
}
Immutable Value
Define a value object type
whose instances are immutable.
Copied Value
Define a value object type
whose instances are copyable.
Functional Programming You Already Know
Instead of using threads and shared memory
as our programming model, we can use
processes and message passing. Process here
just means a protected independent state
with executing code, not necessarily an
operating system process.
Languages such as Erlang (and occam before
it) have shown that processes are a very
successful mechanism for programming
concurrent and parallel systems. Such
systems do not have all the synchronization
stresses that shared-memory, multithreaded
systems have.
Russel Winder
"Message Passing Leads to Better Scalability in Parallel Systems"
Functional Programming You Already Know
OOP to me means only
messaging, local retention
and protection and hiding of
state-process, and extreme
late-binding of all things.
Alan Kay
The makefile language is similar to
declarative programming. This class
of language, in which necessary end
conditions are described but the
order in which actions are to be
taken is not important, is sometimes
confusing to programmers used to
imperative programming.
http://en.wikipedia.org/wiki/Make_(software)
SELECT time, speaker, title
FROM Sessions
WHERE
date = '2013-06-13' AND
time >= '11:40:00'
ORDER BY time
try {
Integer.parseInt(time.substring(0, 2));
}
catch (Exception x) {
return false;
}
if (Integer.parseInt(time.substring(0, 2)) > 12) {
return false;
}
...
if (!time.substring(9, 11).equals("AM") &
!time.substring(9, 11).equals("PM")) {
return false;
}
Burk Hufnagel
"Put the Mouse Down and Step Away from the Keyboard"
97 Things Every Programmer Should Know
public static boolean validateTime(String time) {
return time.matches("(0[1-9]|1[0-2]):[0-5][0-9]:[0-5][0-9] ([AP]M)");
}
Burk Hufnagel
"Put the Mouse Down and Step Away from the Keyboard"
97 Things Every Programmer Should Know
$0 % 3 == 0 { printf "Fizz" }
$0 % 5 == 0 { printf "Buzz" }
$0 % 3 != 0 && $0 % 5 != 0 { printf $0 }
{ printf "n" }
echo {1..100} | tr ' ' 'n' | awk '
$0 % 3 == 0 { printf "Fizz" }
$0 % 5 == 0 { printf "Buzz" }
$0 % 3 != 0 && $0 % 5 != 0 { printf $0 }
{ printf "n" }
'
echo {1..100} | tr ' ' 'n' | awk '
$0 % 3 == 0 { printf "Fizz" }
$0 % 5 == 0 { printf "Buzz" }
$0 % 3 != 0 && $0 % 5 != 0 { printf $0 }
{ printf "n" }
' | diff - expected && echo Pass
/^1?$|^(11+?)1+$/
http://www.noulakaz.net/weblog/2007/03/18/
a-regular-expression-to-check-for-prime-numbers/
def is_prime(n)
("1" * n) !~ /^1?$|^(11+?)1+$/
end
http://xkcd.com/224/
We lost the documentation on quantum mechanics.
You'll have to decode the regexes yourself.

More Related Content

What's hot (20)

PPTX
07. Java Array, Set and Maps
Intro C# Book
 
PDF
Compiler Construction | Lecture 14 | Interpreters
Eelco Visser
 
PPT
Pointcuts and Analysis
Wiwat Ruengmee
 
PDF
C++ questions And Answer
lavparmar007
 
PPT
Chapter 2 Java Methods
Khirulnizam Abd Rahman
 
PDF
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
Eelco Visser
 
PPT
julia-Latest Programming language
Nithya Prakasan
 
PDF
Kotlin Perfomance on Android / Александр Смирнов (Splyt)
Ontico
 
PPTX
16. Java stacks and queues
Intro C# Book
 
PPTX
Python advance
Deepak Chandella
 
PPTX
Object Oriented Programming - Constructors & Destructors
Dudy Ali
 
PPT
Oop lecture9 13
Shahriar Robbani
 
PPTX
15. Streams Files and Directories
Intro C# Book
 
PDF
Linked list
somuinfo123
 
PPTX
Deep Learning and TensorFlow
Oswald Campesato
 
PDF
C# / Java Language Comparison
Robert Bachmann
 
PDF
DeepStochLog: Neural Stochastic Logic Programming
Thomas Winters
 
PDF
Python for data science by www.dmdiploma.com
ShwetaAggarwal56
 
PPT
Memory Management In C++
ShriKant Vashishtha
 
PPTX
Clojure 7-Languages
Pierre de Lacaze
 
07. Java Array, Set and Maps
Intro C# Book
 
Compiler Construction | Lecture 14 | Interpreters
Eelco Visser
 
Pointcuts and Analysis
Wiwat Ruengmee
 
C++ questions And Answer
lavparmar007
 
Chapter 2 Java Methods
Khirulnizam Abd Rahman
 
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
Eelco Visser
 
julia-Latest Programming language
Nithya Prakasan
 
Kotlin Perfomance on Android / Александр Смирнов (Splyt)
Ontico
 
16. Java stacks and queues
Intro C# Book
 
Python advance
Deepak Chandella
 
Object Oriented Programming - Constructors & Destructors
Dudy Ali
 
Oop lecture9 13
Shahriar Robbani
 
15. Streams Files and Directories
Intro C# Book
 
Linked list
somuinfo123
 
Deep Learning and TensorFlow
Oswald Campesato
 
C# / Java Language Comparison
Robert Bachmann
 
DeepStochLog: Neural Stochastic Logic Programming
Thomas Winters
 
Python for data science by www.dmdiploma.com
ShwetaAggarwal56
 
Memory Management In C++
ShriKant Vashishtha
 
Clojure 7-Languages
Pierre de Lacaze
 

Viewers also liked (12)

PDF
Intelligent soft computing based
ijasa
 
PPTX
Dry film thickness by ultrasonication meter
VISHNU SHARMA
 
PDF
The Architecture of Uncertainty
Kevlin Henney
 
PDF
Uncertainty Problem in Control & Decision Theory
SSA KPI
 
PPTX
Representing uncertainty in expert systems
bhupendra kumar
 
PDF
New paradigm in hr &amp; new 'measurement' methods
Elif Kuş Saillard
 
PDF
Managing Uncertainty to Improve Decision Making - Statistical Thinking for Qu...
Prof. Dr. Diego Kuonen
 
PPTX
Sources of uncertainty in the organizational environment
Prayag Ram
 
PPTX
soft-computing
student
 
PPT
Introduction to soft computing
Ankush Kumar
 
PPTX
Soft computing
ganeshpaul6
 
PDF
Exploring Sources of Uncertainties in Solar Resource Measurements
Sandia National Laboratories: Energy & Climate: Renewables
 
Intelligent soft computing based
ijasa
 
Dry film thickness by ultrasonication meter
VISHNU SHARMA
 
The Architecture of Uncertainty
Kevlin Henney
 
Uncertainty Problem in Control & Decision Theory
SSA KPI
 
Representing uncertainty in expert systems
bhupendra kumar
 
New paradigm in hr &amp; new 'measurement' methods
Elif Kuş Saillard
 
Managing Uncertainty to Improve Decision Making - Statistical Thinking for Qu...
Prof. Dr. Diego Kuonen
 
Sources of uncertainty in the organizational environment
Prayag Ram
 
soft-computing
student
 
Introduction to soft computing
Ankush Kumar
 
Soft computing
ganeshpaul6
 
Exploring Sources of Uncertainties in Solar Resource Measurements
Sandia National Laboratories: Energy & Climate: Renewables
 
Ad

Similar to Functional Programming You Already Know (20)

PDF
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Codemotion
 
PPT
TechTalk - Dotnet
heinrich.wendel
 
PDF
Object-oriented Basics
Jamie (Taka) Wang
 
PDF
Lezione03
robynho86
 
PDF
Hadoop + Clojure
elliando dias
 
PDF
Hw09 Hadoop + Clojure
Cloudera, Inc.
 
PPTX
Столпы функционального программирования для адептов ООП, Николай Мозговой
Sigma Software
 
PPTX
golang_getting_started.pptx
Guy Komari
 
PDF
Functions
Swarup Boro
 
PPT
Mixing functional and object oriented approaches to programming in C#
Mark Needham
 
PPTX
Chapter 02 functions -class xii
Praveen M Jigajinni
 
PDF
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Pavlo Baron
 
PDF
Python basic
Saifuddin Kaijar
 
PDF
Introduction to Scalding and Monoids
Hugo Gävert
 
PDF
Lecture 12 os
鍾誠 陳鍾誠
 
PDF
Interpreter Case Study - Design Patterns
CodeOps Technologies LLP
 
PPT
C# programming
umesh patil
 
PDF
Twins: Object Oriented Programming and Functional Programming
RichardWarburton
 
PDF
Functional programming ii
Prashant Kalkar
 
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Codemotion
 
TechTalk - Dotnet
heinrich.wendel
 
Object-oriented Basics
Jamie (Taka) Wang
 
Lezione03
robynho86
 
Hadoop + Clojure
elliando dias
 
Hw09 Hadoop + Clojure
Cloudera, Inc.
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Sigma Software
 
golang_getting_started.pptx
Guy Komari
 
Functions
Swarup Boro
 
Mixing functional and object oriented approaches to programming in C#
Mark Needham
 
Chapter 02 functions -class xii
Praveen M Jigajinni
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Pavlo Baron
 
Python basic
Saifuddin Kaijar
 
Introduction to Scalding and Monoids
Hugo Gävert
 
Lecture 12 os
鍾誠 陳鍾誠
 
Interpreter Case Study - Design Patterns
CodeOps Technologies LLP
 
C# programming
umesh patil
 
Twins: Object Oriented Programming and Functional Programming
RichardWarburton
 
Functional programming ii
Prashant Kalkar
 
Ad

More from Kevlin Henney (20)

PDF
Program with GUTs
Kevlin Henney
 
PDF
The Case for Technical Excellence
Kevlin Henney
 
PDF
Empirical Development
Kevlin Henney
 
PDF
Lambda? You Keep Using that Letter
Kevlin Henney
 
PDF
Lambda? You Keep Using that Letter
Kevlin Henney
 
PDF
Solid Deconstruction
Kevlin Henney
 
PDF
Get Kata
Kevlin Henney
 
PDF
Procedural Programming: It’s Back? It Never Went Away
Kevlin Henney
 
PDF
Structure and Interpretation of Test Cases
Kevlin Henney
 
PDF
Agility ≠ Speed
Kevlin Henney
 
PDF
Refactoring to Immutability
Kevlin Henney
 
PDF
Old Is the New New
Kevlin Henney
 
PDF
Turning Development Outside-In
Kevlin Henney
 
PDF
Giving Code a Good Name
Kevlin Henney
 
PDF
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Kevlin Henney
 
PDF
Thinking Outside the Synchronisation Quadrant
Kevlin Henney
 
PDF
Code as Risk
Kevlin Henney
 
PDF
Software Is Details
Kevlin Henney
 
PDF
Game of Sprints
Kevlin Henney
 
PDF
Good Code
Kevlin Henney
 
Program with GUTs
Kevlin Henney
 
The Case for Technical Excellence
Kevlin Henney
 
Empirical Development
Kevlin Henney
 
Lambda? You Keep Using that Letter
Kevlin Henney
 
Lambda? You Keep Using that Letter
Kevlin Henney
 
Solid Deconstruction
Kevlin Henney
 
Get Kata
Kevlin Henney
 
Procedural Programming: It’s Back? It Never Went Away
Kevlin Henney
 
Structure and Interpretation of Test Cases
Kevlin Henney
 
Agility ≠ Speed
Kevlin Henney
 
Refactoring to Immutability
Kevlin Henney
 
Old Is the New New
Kevlin Henney
 
Turning Development Outside-In
Kevlin Henney
 
Giving Code a Good Name
Kevlin Henney
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Kevlin Henney
 
Thinking Outside the Synchronisation Quadrant
Kevlin Henney
 
Code as Risk
Kevlin Henney
 
Software Is Details
Kevlin Henney
 
Game of Sprints
Kevlin Henney
 
Good Code
Kevlin Henney
 

Recently uploaded (20)

PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PDF
Adobe Premiere Pro Crack / Full Version / Free Download
hashhshs786
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Adobe Premiere Pro Crack / Full Version / Free Download
hashhshs786
 

Functional Programming You Already Know

  • 6. functional programming higher-order functions recursion statelessness first-class functions immutability pure functions unification declarative pattern matching non-strict evaluation idempotence lists mathematics lambdas currying monads
  • 7. Excel is the world's most popular functional language. Simon Peyton Jones
  • 8. To iterate is human, to recurse divine. L Peter Deutsch
  • 9. int factorial(int n) { int result = 1; while(n > 1) result *= n--; return result; }
  • 10. int factorial(int n) { if(n > 1) return n * factorial(n - 1); else return 1; }
  • 11. int factorial(int n) { return n > 1 ? n * factorial(n - 1) : 1; }
  • 12. n! = 1 (n – 1)!  n if n = 0, if n > 0.{
  • 13. n! = n k = 1 k
  • 17. #include <stdio.h> /* printd: print n in decimal */ void printd(int n) { if (n < 0) { putchar('-'); n = -n; } if (n / 10) printd(n / 10); putchar(n % 10 + '0'); }
  • 19. /* grep: search for regexp in file */ int grep(char *regexp, FILE *f, char *name) { int n, nmatch; char buf[BUFSIZ]; nmatch = 0; while (fgets(buf, sizeof buf, f) != NULL) { n = strlen(buf); if (n > 0 && buf[n-1] == 'n') buf[n-1] = '0'; if (match(regexp, buf)) { nmatch++; if (name != NULL) printf("%s:", name); printf("%sn", buf); } } return nmatch; } /* matchhere: search for regexp at beginning of text */ int matchhere(char *regexp, char *text) { if (regexp[0] == '0') return 1; if (regexp[1] == '*') return matchstar(regexp[0], regexp+2, text); if (regexp[0] == '$' && regexp[1] == '0') return *text == '0'; if (*text!='0' && (regexp[0]=='.' || regexp[0]==*text)) return matchhere(regexp+1, text+1); return 0; } /* match: search for regexp anywhere in text */ int match(char *regexp, char *text) { if (regexp[0] == '^') return matchhere(regexp+1, text); do { /* must look even if string is empty */ if (matchhere(regexp, text)) return 1; } while (*text++ != '0'); return 0; } /* matchstar: search for c*regexp at beginning of text */ int matchstar(int c, char *regexp, char *text) { do { /* a * matches zero or more instances */ if (matchhere(regexp, text)) return 1; } while (*text != '0' && (*text++ == c || c == '.')); return 0; }
  • 24. void qsort( void *base, size_t nmemb, size_t size, int (*compar)( const void *, const void *));
  • 25. void (*signal( int sig, void (*func)(int)))(int);
  • 27. One of the most powerful mechanisms for program structuring [...] is the block and procedure concept. A procedure which is capable of giving rise to block instances which survive its call will be known as a class; and the instances will be known as objects of that class. A call of a class generates a new object of that class. Ole-Johan Dahl and C A R Hoare "Hierarchical Program Structures"
  • 28. public class HeatingSystem { public void turnOn()  public void turnOff()   } public class Timer { public Timer(TimeOfDay toExpire, Runnable toDo)  public void run()  public void cancel()   }
  • 29. Timer on = new Timer( timeToTurnOn, new Runnable() { public void run() { heatingSystem.turnOn(); } }); Timer off = new Timer( timeToTurnOff, new Runnable() { public void run() { heatingSystem.turnOff(); } });
  • 30. class Timer { public: Timer(TimeOfDay toExpire, function<void()> toDo); void run(); void cancel(); ... };
  • 31. Timer on( timeOn, bind(&HeatingSystem::turnOn, &heatingSystem)); Timer off( timeOff, bind(&HeatingSystem::turnOff, &heatingSystem));
  • 32. public class Timer { public Timer(TimeOfDay toExpire, Action toDo) ... public void Run() ... public void Cancel() ... ... }
  • 33. Timer on = new Timer(timeOn, heatingSystem.TurnOn); Timer off = new Timer(timeOff, heatingSystem.TurnOff);
  • 34. Timer on = new Timer(timeOn, () => heatingSystem.TurnOn()); Timer off = new Timer(timeOff, () => heatingSystem.TurnOff());
  • 35. William Cook, "On Understanding Data Abstraction, Revisited"
  • 36. newStack =   (let items = ref()  { isEmpty =   #items = 0, depth =   #items, push =  x  items := xˆitemsy  y  0...#items, top =   items0 })
  • 37. var newStack = function() { var items = [] return { isEmpty: function() { return items.length === 0 }, depth: function() { return items.length }, push: function(newTop) { items = items.unshift(newTop) }, top: function() { return items[0] } } }
  • 38. intension, n. (Logic)  the set of characteristics or properties by which the referent or referents of a given expression is determined; the sense of an expression that determines its reference in every possible world, as opposed to its actual reference. For example, the intension of prime number may be having non-trivial integral factors, whereas its extension would be the set {2, 3, 5, 7, ...}. E J Borowski and J M Borwein Dictionary of Mathematics
  • 39. A list comprehension is a syntactic construct available in some programming languages for creating a list based on existing lists. It follows the form of the mathematical set-builder notation (set comprehension) as distinct from the use of map and filter functions. http://en.wikipedia.org/wiki/List_comprehension
  • 40. { 2  x | x  , x > 0 }
  • 41. (2 * x for x in count() if x > 0)
  • 42. { x | x  , x > 0  x mod 2 = 0 }
  • 43. (x for x in count() if x > 0 and x % 2 == 0)
  • 45. Concatenative programming is so called because it uses function composition instead of function application—a non-concatenative language is thus called applicative. Jon Purdy http://evincarofautumn.blogspot.in/2012/02/ why-concatenative-programming-matters.html
  • 47. (f ○ g ○ h)(x)
  • 48. x h g f
  • 49. h | g | f
  • 50. This is the basic reason Unix pipes are so powerful: they form a rudimentary string-based concatenative programming language. Jon Purdy http://evincarofautumn.blogspot.in/2012/02/ why-concatenative-programming-matters.html
  • 52. find . -name "*.java" | sed 's/.*///' | sort | uniq -c | grep -v "^ *1 " | sort -r Heinz Kabutz "Know Your IDE" 97 Things Every Programmer Should Know
  • 56. Some people, when confronted with a problem, think, "I know, I'll use threads," and then two they hav erpoblesms. Ned Batchelder https://twitter.com/nedbat/status/194873829825327104
  • 57. public final class Date implements ... { ... public int getYear() ... public int getMonth() ... public int getDayInMonth() ... public void setYear(int newYear) ... public void setMonth(int newMonth) ... public void setDayInMonth(int newDayInMonth) ... ... }
  • 58. public final class Date implements ... { ... public int getYear() ... public int getMonth() ... public int getWeekInYear() ... public int getDayInYear() ... public int getDayInMonth() ... public int getDayInWeek() ... public void setYear(int newYear) ... public void setMonth(int newMonth) ... public void setWeekInYear(int newWeek) ... public void setDayInYear(int newDayInYear) ... public void setDayInMonth(int newDayInMonth) ... public void setDayInWeek(int newDayInWeek) ... ... }
  • 59. public final class Date implements ... { ... public int getYear() ... public int getMonth() ... public int getWeekInYear() ... public int getDayInYear() ... public int getDayInMonth() ... public int getDayInWeek() ... ... }
  • 60. When it is not necessary to change, it is necessary not to change. Lucius Cary
  • 61. public final class Date implements ... { ... public int getYear() ... public int getMonth() ... public int getWeekInYear() ... public int getDayInYear() ... public int getDayInMonth() ... public int getDayInWeek() ... ... }
  • 62. public final class Date implements ... { ... public int year() ... public int month() ... public int weekInYear() ... public int dayInYear() ... public int dayInMonth() ... public int dayInWeek() ... ... }
  • 63. Immutable Value Define a value object type whose instances are immutable. Copied Value Define a value object type whose instances are copyable.
  • 65. Instead of using threads and shared memory as our programming model, we can use processes and message passing. Process here just means a protected independent state with executing code, not necessarily an operating system process. Languages such as Erlang (and occam before it) have shown that processes are a very successful mechanism for programming concurrent and parallel systems. Such systems do not have all the synchronization stresses that shared-memory, multithreaded systems have. Russel Winder "Message Passing Leads to Better Scalability in Parallel Systems"
  • 67. OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. Alan Kay
  • 68. The makefile language is similar to declarative programming. This class of language, in which necessary end conditions are described but the order in which actions are to be taken is not important, is sometimes confusing to programmers used to imperative programming. http://en.wikipedia.org/wiki/Make_(software)
  • 69. SELECT time, speaker, title FROM Sessions WHERE date = '2013-06-13' AND time >= '11:40:00' ORDER BY time
  • 70. try { Integer.parseInt(time.substring(0, 2)); } catch (Exception x) { return false; } if (Integer.parseInt(time.substring(0, 2)) > 12) { return false; } ... if (!time.substring(9, 11).equals("AM") & !time.substring(9, 11).equals("PM")) { return false; } Burk Hufnagel "Put the Mouse Down and Step Away from the Keyboard" 97 Things Every Programmer Should Know
  • 71. public static boolean validateTime(String time) { return time.matches("(0[1-9]|1[0-2]):[0-5][0-9]:[0-5][0-9] ([AP]M)"); } Burk Hufnagel "Put the Mouse Down and Step Away from the Keyboard" 97 Things Every Programmer Should Know
  • 72. $0 % 3 == 0 { printf "Fizz" } $0 % 5 == 0 { printf "Buzz" } $0 % 3 != 0 && $0 % 5 != 0 { printf $0 } { printf "n" }
  • 73. echo {1..100} | tr ' ' 'n' | awk ' $0 % 3 == 0 { printf "Fizz" } $0 % 5 == 0 { printf "Buzz" } $0 % 3 != 0 && $0 % 5 != 0 { printf $0 } { printf "n" } '
  • 74. echo {1..100} | tr ' ' 'n' | awk ' $0 % 3 == 0 { printf "Fizz" } $0 % 5 == 0 { printf "Buzz" } $0 % 3 != 0 && $0 % 5 != 0 { printf $0 } { printf "n" } ' | diff - expected && echo Pass
  • 76. http://xkcd.com/224/ We lost the documentation on quantum mechanics. You'll have to decode the regexes yourself.