Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
A Humane Introduction to Functional Programming
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
John S.
May 09, 2014
Programming
72
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
A Humane Introduction to Functional Programming
A gentle look at what functional programming is.
John S.
May 09, 2014
More Decks by John S.
See All by John S.
Iteration, iteration, iteration.
sneeu
0
130
Do Something Else
sneeu
0
34
Data at FanDuel
sneeu
1
110
As Little As Possible
sneeu
0
89
Other Decks in Programming
See All in Programming
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
220
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
contenteditable と日本語入力に向き合う
colorful12
0
200
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
SREの越境 / SRE Collaboration
y0hgi
2
310
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
180
APNsからLive Activityを開始する話
yumnumm
0
170
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
気持ちぃ〜角丸 Squircle
ryu1013
0
310
AWSに止められる覚悟してますか?
morizo_1984
2
530
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
KATA
mclloyd
PRO
35
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
How to make the Groovebox
asonas
2
2.5k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
Believing is Seeing
oripsolob
1
240
How to train your dragon (web standard)
notwaldorf
96
6.9k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
Prompt Engineering for Job Search
mfonobong
0
520
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
A Humane Introduction to Functional Programming 9th May, 2014-ScotlandJS #sjsJohn
A Humane Introduction to Functional Programming 9th May, 2014-ScotlandJS #sjsJohn
John Sutherland sneeu.com #sjsJohn
A Humane Introduction to Functional Programming 9th May, 2014-ScotlandJS #sjsJohn
Functional Programming “… treats computation as the evaluation of mathematical
functions and avoids state and mutable data #sjsJohn
Humane “Characterised by tenderness, compassion, and sympathy for people and
animals, especially for the suffering or distressed #sjsJohn
“We’ll need to be strict with the 20 minute duration
#sjsJohn -Peter Aitken
Functional Programming Matters #sjsJohn Why
Functional Programming Offers #sjsJohn What
Warning! Contrived examples ahead #sjsJohn
Higher-Order functions #sjsJohn Functions which take a function as an
argument, return a function, or both.
#sjsJohn var makeAdder = function (x) { return function (n)
{ return x + n; }; }; ! _.map([2, 3, 5], makeAdder(7)); // [9, 10, 12] 1 2 3 4 5 6 7
#sjsJohn var map = function (list, func) { var i,
result = []; ! for (i = 0; i < list.length; i++) { result.push(func(list[i])); } ! return result; }; 1 2 3 4 5 6 7 8 9
Purity #sjsJohn A pure function always evaluates to the same
result given the same arguments.
#sjsJohn var x = 3; ! var impure = function
(y) { return x + y; }; ! expect(impure(4)).toBe(7); 1 2 3 4 5 6 7
Immutability #sjsJohn An immutable object is an object whose value
cannot be changed after it is created.
#sjsJohn var map = function (list, func) { var i,
result = []; ! for (i = 0; i < list.length; i++) { result.push(func(list[i])); } ! return result; }; 1 2 3 4 5 6 7 8 9
#sjsJohn var map = function (list, func) { if (list.length
== 0) { return []; } else { return [func(list[0])].concat( map(list.slice(1), func) ); } }; 1 2 3 4 5 6 7 8 9
“If a pure function mutates some local data in order
to produce an immutable return value, is that ok? #sjsJohn -Rich Hickey
Application #sjsJohn
Project Euler Problem No. 2 #sjsJohn By considering the terms
in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
Fibonacci sequence #sjsJohn Fn = Fn−1 + Fn−2
1, 1, 2, 3, 5, 8, 13 … #sjsJohn
var euler2 = function () { var a = 1,
b = 1, result = 0, next = a + b; ! while (next <= 4000000) { if (next % 2 == 0) result += next; a = b; b = next; next = a + b; } ! return result; }; 1 2 3 4 5 6 7 8 9 10 11 12 13 #sjsJohn
var euler2 = function () { var a = 1,
b = 1, result = 0, next = a + b; ! while (next <= 4000000) { if (next % 2 == 0) result += next; a = b; b = next; next = a + b; } ! return result; }; 1 2 3 4 5 6 7 8 9 10 11 12 13 #sjsJohn
var fib = function (n) { if (n < 2)
return 1; return fib(n - 1) + fib(n - 2); }; 1 2 3 4 #sjsJohn
var fibSequence = function (max) { var i, seq =
[]; ! for (i = 0; fib(i) <= max; i++) { seq.push(fib(i)); } ! return seq; }; 1 2 3 4 5 6 7 8 9 #sjsJohn
var fibSequence = function (pred) { var i, seq =
[]; ! for (i = 0; pred(fib(i), i); i++) { seq.push(fib(i)); } ! return seq; }; 1 2 3 4 5 6 7 8 9 #sjsJohn
var twentyTerms = function (f, i) { return i <
20; }; ! var maxTerm = function (max) { return function (f, i) { return f <= max; }; }; 1 2 3 4 5 6 7 8 9 #sjsJohn
var fibs = fibSequence(maxTerm(4000000)); 1 #sjsJohn
var isEven = function (n) { return n % 2
== 0; }; ! var fibs = _.filter( fibSequence(maxTerm(4000000)), isEven ); 1 2 3 4 5 6 7 8 #sjsJohn
The Sum of a List #sjsJohn … is the first
item plus the sum of the rest.
var add = function (a, b) { return a +
b; }; ! var sum = function (list) { return _.reduce(list, add, 0); }; 1 2 3 4 5 6 7 #sjsJohn
_.reduce([1, 2, 3, 4, 5], add, 0); ! add(0, 1)
// 1 add(1, 2) // 3 add(3, 3) // 6 add(6, 4) // 10 add(10, 5) // 15 #sjsJohn 1 2 3 4 5 6 7
Drum-roll please #sjsJohn
sum( _.filter( fibSequence( maxTerm(4000000) ), function (n) { return n
% 2 == 0; } ) ); 1 2 3 4 5 6 7 8 #sjsJohn
var fib = function (n) { if (n < 2)
return 1; return fib(n - 1) + fib(n - 2); }; 1 2 3 4 #sjsJohn
var fib = _.memoize(function (n) { if (n < 2)
return 1; return fib(n - 1) + fib(n - 2); }); 1 2 3 4 #sjsJohn
var memoize = function (func) { var cache = {};
! return function () { if (!_.has(cache, arguments)) { cache[arguments] = func.apply(this, arguments); } return cache[arguments]; }; }; 1 2 3 4 5 6 7 8 9 10 11 #sjsJohn
Review & an Improvement #sjsJohn
var fibs = function* () { var i = 0;
! while (true) { yield fib(i); i++; } }; 1 2 3 4 5 6 7 8 #sjsJohn
var fibGenerator = fibs(); ! fibGenerator.next(); // 1 fibGenerator.next(); //
1 fibGenerator.next(); // 2 fibGenerator.next(); // 3 fibGenerator.next(); // 5 fibGenerator.next(); // 8 1 2 3 4 5 6 7 8 #sjsJohn
Further … #sjsJohn Adventures in Functional Programming - Jim Weirich
Enemy of the State - Phil Roberts Functional JavaScript - Michael Fogus
None
Thank you!