Functional Style and Its Algebra of Programs John Backus IBM Research Laboratory, San Jose Turing award 1977 https://news.ycombinator.com/item?id=7671379
#{self}" end end c = Cat.new # => #Cat:0x00007faf60008888 m = c.method(:talk) # => #Method: Cat#talk m.call # => self is #Cat:0x00007faf60008888 http://ruby-doc.org/core/Object.html#method-i-method
} end end even = -> x { x % 2 == 0 } square = -> x { x * x } add1 = -> x { x + 1 } # is (x + 1)^2 even? f = even.◦ square.◦ add1 f[1] # => true f[2] # => false
1 tail : list -> list tail([1,2,3]) = [2,3] construct : value, list -> list construct(1, [2,3]) = [1,2,3] concatenate : list, list -> list concatenate([1,2], [8,10]) = [1,2,8,10]
the evaluation of an expression until its value is needed (non-strict evaluation) and which also avoids repeated evaluations https://en.wikipedia.org/wiki/Lazy_evaluation