Давайте определим функцию с помощью Ruby, лямбды.
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
Try, чтобы держать вещи простыми и показать шаги, а не пытаться понять, что делает один вкладыш. Да, они хороши, но если вы не можете прочитать это, вы не можете это понять.
Вот что-то я совсем недавно работал на:
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)
Это средняя долгота формулы солнца с использованием методов Enumerator и, конечно лямбда.
Вы пытаетесь понять Ruby или Lambda Calculus? У вас действительно много кошек в этой сумке. У вас есть хорошие ответы на вопрос о том, как Ruby делает лямбды различными способами. Лямбда - это Proc. Из документа ядра «Эквивалент Proc.new», за исключением того, что в результате объекты Proc проверяют количество параметров, передаваемых при вызове ». Итак, у ядра есть функция лямбда или метод, но вы можете узнать больше, глядя на Proc, у которого есть лямбда? и является проверкой типа Proc, где дополнительные аргументы игнорируются для обычных объектов Proc, но для lambdas могут возникать ошибки. –
К сожалению, функция -> имеет очень мало документации в Ruby, поэтому мы должны полагаться на сообщество Ruby, чтобы найти его использование. Я не специалист по компьютерным наукам, но логика его тесно связана с https://en.wikipedia.org/wiki/Lambda_calculus –
. Я нашел термин для этого. Попробуйте «анонимные лямбды» в Ruby –