Tengo un pequeño problema con los cierres y me gustaría saber qué el código equivalente para el procedimiento canonical make-sumador sería en Ruby.Cierres en Ruby
En el esquema sería como:
(define (make-adder n)
(lambda (x) (+ x n))
Tengo un pequeño problema con los cierres y me gustaría saber qué el código equivalente para el procedimiento canonical make-sumador sería en Ruby.Cierres en Ruby
En el esquema sería como:
(define (make-adder n)
(lambda (x) (+ x n))
Es realmente muy cerca ...
def make_addr n
lambda { |x| x + n }
end
t = make_addr 100
t.call 1
101
En 1.9 se puede utilizar ...
def make_addr n
->(x) { x + n }
end
Aquí es una muy bonito screen-cast explicando bloques y cierres en Ruby: http://www.teachmetocode.com/screencasts/8
echaré un vistazo al video, gracias – burlsm
Una diferencia es que mientras Scheme tiene solo un tipo de procedimiento, Ruby tiene cuatro. La mayoría de las veces, se comportan de manera similar a su lambda estándar, pero debe intentar understand all the details in depth.
Ésta es otra manera de hacerlo en 1,9:
make_adder = -> n, x { n + x }
hundred_adder = make_adder.curry[100]
hundred_adder[4] # => 104
muchas gracias, que despejó mis dudas. – burlsm