Давайте определим функцию, используя Ruby lambda.
def plus_two # no args here
->(x) {x + 2} # args go here
end
# assign a value
x = 1
# call it
plus_two.call(x)
# => 3
Ваш первый пример немного сложнее, но, используя эту идею, вы сможете придумать функциональные методы. Я изучаю Scala, и функциональное программирование основано на этих принципах замены.
Попробуйте сделать рекурсию, используя их. Это как вызывать функции функций n раз. Какой тогда будет базовый случай?
Что касается лямбда-исчисления https://github.com/mackorone/lambda/blob/master/intro.pdf
Старайтесь не усложнять и показывать шаги, а не пытаться понять, что делает один лайнер. Да, они хороши, но если вы не можете их прочитать, вы не сможете их понять.
Вот то, над чем я недавно работал:
require 'date'
num = DateTime.now.to_time.utc.to_datetime.ajd - 2451545.0
@t = num / 36525.0
# the terms in reverse order form for the array
@l0_a = [1.0/-19880000.0,
1.0/-152990.0,
1.0/499310.0,
0.0003032028,
36000.76982779,
280.4664567]
# make an enumerator
@l0_e = @l0_a.each
# make a lambda to pass the enumerator to.
def my_lambda
->(x) {x.reduce {|acc, el| acc * @t + el} % 360}
end
puts my_lambda.call(@l0_e)
Это средняя долгота по формуле солнца с использованием методов счетчика и, конечно же, лямбда.
person
Douglas G. Allen
schedule
05.11.2015