zu implementieren Ich brauche einige Beispiele für die Umsetzung Curry-Funktion in Ruby (1.8.6 oder 1.8.7 nicht 1.9).wie curry (teilfunktion) in ruby
5
A
Antwort
5
Also hier ist, wie mit Blöcken zu tun currying, anstatt Methoden:
def curry(&block)
arity = (block.arity >= 0) ? block.arity : -(block.arity + 1)
# return an immediate value if the block has one
return block[] if arity == 0
# otherwise, curry it argument by argument
args = []
innermost = lambda do |last,*extra|
args[arity-1] = last
block[*(args+extra)]
end
(0...(arity-1)).to_a.reverse.inject(innermost) do |inner,i|
lambda do |arg_i,*extra|
args[i] = arg_i
# pass extra arguments on to inner calls
if extra.empty?
inner
else
inner[*extra]
end
end
end
end
Und es funktioniert ziemlich gut in der Praxis. Argumente können curried werden oder nicht, und zusätzliche Argumente werden wie üblich gesammelt:
irb> (curry { |x,y| x + y })[1,2]
#=> 3
irb> (curry { |x,y| x + y })[1][2]
#=> 3
irb> (curry { |x,*ys| ys << x })[1]
#=> [1]
irb> (curry { |x,*ys| ys << x })[1,2,3]
#=> [2, 3, 1]
irb> (curry { |x,y,*zs| zs << (x+y) })[1,2]
#=> [3]
irb> (curry { |x,y,*zs| zs << (x+y) })[1,2,4]
#=> [4, 3]
irb> (curry { |x,y,*zs| zs << (x+y) })[1][2]
#=> [3]
irb> (curry { |x,y,*zs| zs << (x+y) })[1][2,4]
#=> [4, 3]
irb> (curry { |a,b,c,d,e| a+b+c+d+e })[1,2,3,4,5]
#=> 15
irb> (curry { |a,b,c,d,e| a+b+c+d+e })[1][2][3][4][5]
#=> 15
irb> (curry { |a,b,c,d,e| a+b+c+d+e })[1,2][3][4][5]
#=> 15
irb> (curry { |a,b,c,d,e| a+b+c+d+e })[1][2,3,4][5]
#=> 15
ich die Design-Entscheidung keine argument Blöcke zurückkehren einen unmittelbaren Wert zu haben, machte auf currying:
irb> curry { 3 }
#=> 3
irb> curry { |*xs| xs }
#=> []
Dies ist notwendig, um zu vermeiden, mit einer []
jedes Mal zu beenden Currying (und ist ziemlich Haskell-like).
3
Vielleicht kann das helfen: http://asemanfar.com/Currying-in-Ruby. Es hat Quellcode für ein Modul Curriable.
Verwandte Themen
- 1. Wann ist eine Scala-Teilfunktion keine Teilfunktion?
- 2. Warum ist Curry Curry?
- 3. Konvertieren Teilfunktion Methode in Python
- 4. Wie funktioniert Curry (==)?
- 5. Teilfunktion Anwendung mit List.map
- 6. CPS in Curry-Sprachen
- 7. Warum heißt die Funktion Curry Curry?
- 8. Wie kann Go-lang Curry?
- 9. Wie man eine Methode curry?
- 10. Wie man eine Funktion in Scala curry
- 11. swift - Teilfunktion Anwendung mit Generika
- 12. 3 Argumente in Haskell curry
- 13. Anfänger: Curry-Funktionen in Scheme
- 14. Curry außer Betrieb in Haskell
- 15. anonyme Funktion in SML Curry
- 16. F # Curry-Effizienz?
- 17. Wie erstelle ich eine Teilfunktion mit Generics in Scala?
- 18. Groovy Fehler beim curry
- 19. JavaScript Curry Funktion
- 20. F # Curry-Funktion
- 21. Möglich instance_eval einen curry proc?
- 22. Wie kann ich scala Karte auf eine Teilfunktion umwandeln
- 23. Curry in scala mit parametrischen Typen
- 24. Curry für Vorlagen in C++ Metaprogrammierung
- 25. Curry-Funktion verwandte Fragen in Scala
- 26. Implizites Curry in Schema mit Syntaxregeln?
- 27. Kann ich das besser curry?
- 28. Wie curry ein ... Argument nach Position in R?
- 29. Wie löst man den Typenkonfliktfehler in dieser Curry-Funktion?
- 30. Wie behebt man diese Curry-Funktion in Swift?