Définissons une fonction en utilisant 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
Votre premier exemple est un peu plus complexe mais en utilisant cette idée, vous devriez être capable de trouver des méthodes fonctionnelles. J'étudie Scala et la programmation fonctionnelle est basée sur ces principes de substitution. Essayez de faire une certaine récursivité en utilisant ceux-ci.
C'est comme appeler des fonctions de fonctions n fois. Quel serait alors le cas de base?
Quant au Lambda Calcul https://github.com/mackorone/lambda/blob/master/intro.pdf
Essayez de garder les choses simples et montrer les étapes plutôt que d'essayer de comprendre ce qui est en train de faire une seule ligne. Oui, ils sont gentils mais si vous ne pouvez pas le lire, vous ne pouvez pas le comprendre.
est ici quelque chose que je viens juste travailler sur:
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)
Ceci est la longitude moyenne de la formule du soleil en utilisant des méthodes de recenseur et bien sûr un lambda.
Essayez-vous de comprendre Rubis ou Lambda Calculus? Vous avez vraiment beaucoup de chats dans ce sac. Vous avez de bonnes réponses sur la manière dont Ruby fait les lambdas de différentes manières. Un lambda est un Proc. De Kernel doc "Equivalent à Proc.new, sauf les objets Proc résultants vérifier le nombre de paramètres passés lors de l'appel." Donc, le noyau a la fonction ou la méthode lambda mais vous pouvez en apprendre plus en regardant Proc qui a lambda? et est une vérification pour le type de Proc où les arguments supplémentaires sont ignorés pour les objets Proc réguliers, mais pour lambdas pourrait provoquer des erreurs. –
Malheureusement, la fonction -> a très peu de documentation dans Ruby, nous devons donc compter sur la communauté Ruby pour en trouver l'usage. Je ne suis pas une personne de l'informatique mais la logique de celui-ci suit de près avec https://en.wikipedia.org/wiki/Lambda_calculus –
J'ai trouvé le terme pour cela. Essayez 'lambdas anonymes' dans Ruby –