Functions in Lisp
(map
(lambda (x) (* x 2))
(1 2 3))
Slide 29
Slide 29 text
Functions in Lisp
(map
(lambda (x) (* x 2))
(1 2 3))
[1, 2, 3].map(
&lambda { |x| x * 2 }
)
Slide 30
Slide 30 text
Functions in Ruby
my_fun = lambda { |x| x * 2 } # => Proc
def takes_a_lambda(fun)
fun.call(2)
end
takes_a_lambda(my_fun) # => 4
Slide 31
Slide 31 text
Functions in Ruby
{ |x| x * 2 } # => SyntaxError
def takes_a_block
yield 2
end
takes_a_block { |x| x * 2 } # => 4
Slide 32
Slide 32 text
Concise lambdas
(map (1 2 3) (lambda (x) (* x 2)))
[1, 2, 3].map { |x| x * 2 }
Slide 33
Slide 33 text
Concise lambdas
(remove-if (lambda (n) (< n 4))
(map (lambda (x) (* x 2))
(1 2 3)))
[1, 2, 3].
map { |x| x * 2 }.
reject{ |n| n < 4 }
Slide 34
Slide 34 text
Concise lambdas
(describe "my machine" (lambda () (
(it "produces widgets" (lambda () (
;...
))))))
describe "my machine" do
it "produces widgets" do
#...
end
end
Slide 35
Slide 35 text
Multiple function arguments
(even-odd-map
(lambda (x) (* x 2))
(lambda (x) (* x 3))
(1 2 3 4))
[1, 2, 3, 4].even_odd_map(
lambda { |x| x * 2 },
lambda { |x| x * 3 },
)
Slide 36
Slide 36 text
Lisp is consistent
Ruby is pragmatic
Slide 37
Slide 37 text
Concise lambdas catching on
Ruby 1.9+:
lambda { |x| x * 2 }
->(x) { x * 2 }
Slide 38
Slide 38 text
Concise lambdas catching on
Javascipt ES6:
array.map(function(x) { x * 2 })
array.map(x => x * 2)
Slide 39
Slide 39 text
Concise lambdas catching on
Scala:
array.map(_ * 2)
array.map(2*)
Message passing similarities
Smalltalk:
Integer isKindOf: Class
Ruby:
Integer.is_a? Class
Slide 66
Slide 66 text
Message passing similarities
Integer extend [
doesNotUnderstand: msg [
'method not defined' printNl
]
]
class Integer
def method_missing(msg)
puts 'method not defined'
end
end
Slide 67
Slide 67 text
Control flow with message sending
Smalltalk:
array do: [ :element | Transcript show: element ]
Ruby:
array.each { |element| puts element }
A brief aside: Other OO languages
Not many people know this, but before I created
Ruby, as a student I was an advocate for statically
typed OO langauges.
— Matz
Slide 73
Slide 73 text
A brief aside: Other OO languages
—Ada: 1977-83
—Eiffel: 1985
Important features
—Multiple inheritance
—Generics
Slide 74
Slide 74 text
No content
Slide 75
Slide 75 text
"A program is correct if it gets the job done before
you get fired."
-- Larry Wall