У меня небольшие проблемы с закрытием, и я хотел бы знать, что
эквивалентный код для процедуры канонического make-adder будет в
Рубин.
В схеме это будет выглядеть так:
(define (make-adder n)
(lambda (x) (+ x n))
Ответ 1
На самом деле очень близко...
def make_addr n
lambda { |x| x + n }
end
t = make_addr 100
t.call 1
101
В 1.9 вы можете использовать...
def make_addr n
->(x) { x + n }
end
Ответ 2
Одно отличие состоит в том, что, хотя схема имеет только один вид процедуры, Ruby имеет четыре. В большинстве случаев они ведут себя так же, как и ваша стандартная лямбда, но вы должны попробовать понять все детали подробно.
Ответ 3
Вот еще один способ сделать это в 1.9:
make_adder = -> n, x { n + x }
hundred_adder = make_adder.curry[100]
hundred_adder[4] # => 104