¿Existe una forma mejor de expresar (\(a, b) -> a < b)
con composición de funciones? Siento que me falta algo y experimentar con curry
solo me confundió más.Composición de función y tupla
Respuesta
curry
es lo incorrecto de usar aquí; convierte una función que funciona en tuplas en una función curried. Desea que el opuesto, que es uncurry
:
uncurry :: (a -> b -> c) -> (a, b) -> c
En este caso, es uncurry (<)
.
(Otra fuente útil para combinadores útiles en la escritura de funciones en tuplas es Control.Arrow
; ya (->)
es una instancia de Arrow
, se puede leer a b c
como b -> c
.)
En cuanto a los tipos es la mejor manera en Haskell a obtener la primera idea, lo que hace cualquier función:
curry :: ((a, b) -> c) -> a -> b -> c
uncurry :: (a -> b -> c) -> (a, b) -> c
curry
: función del par → función de curry (que curries una función).
uncurry
: curried function → function of pair.
Haskell Wiki page on currying tiene pequeños ejercicios al final de la página:
- Simplificar
curry id
- Simplificar
uncurry const
- expreso
snd
usandocurry
ouncurry
y otras funciones básicas preludio y sin lambdas- Escriba la función
\(x,y) -> (y,x)
sin lambda y wi th solo funciones PreludioTrate de resolver estos ejercicios en este momento, le darán una visión masiva del sistema de tipo Haskell y la aplicación de funciones.
Hay varias aplicaciones interesantes de uncurry
, tratar de pasar argumentos diferentes a las funciones siguientes y ver lo que hacen:
uncurry (.) :: (b -> c, a -> b) -> a -> c
uncurry (flip .) :: (b -> a -> b1 -> c, b) -> b1 -> a -> c
uncurry (flip (.)) :: (a -> b, b -> c) -> a -> c
uncurry ($) :: (b -> c, b) -> c
uncurry (flip ($)) :: (a, a -> c) -> c
-- uncurry (,) is an identity function for pairs
uncurry (,) :: (a, b) -> (a, b)
uncurry (,) (1,2) -- returns (1,2)
uncurry uncurry :: (a -> b -> c, (a, b)) -> c
uncurry uncurry ((+), (2, 3)) -- returns 5
-- curry . uncurry and uncurry . curry are identity functions
curry . uncurry :: (a -> b -> c) -> (a -> b -> c)
(curry . uncurry) (+) 2 3 -- returns 5
uncurry . curry :: ((a, b) -> c) -> ((a, b) -> c)
(uncurry . curry) fst (2,3) -- returns 2
-- pair -> triple
uncurry (,,) :: (a, b) -> c -> (a, b, c)
uncurry (,,) (1,2) 3 -- returns (1,2,3)
- 1. Scala composición del tipo de tupla
- 2. runST y la función composición
- 3. composición de funciones en Haskell con argumentos de tupla
- 4. Composición de la función
- 5. Función de composición variable
- 6. función de composición y el módulo funcional
- 7. Haskell función composición
- 8. función Haskell composición pregunta
- 9. Python composición de la función
- 10. composición función genérica en Haskell
- 11. pereza y composición de la función (haskell, erlang)
- 12. Haskell: la inferencia de tipos y composición función
- 13. F # Función Composición con entrada de múltiples parámetros
- 14. Liskov SUSTITUCIÓN y Composición
- 15. Tubería, Composición y Currying
- 16. Tipo anónimo y tupla
- 17. ¿Cómo aplicar una función a una tupla?
- 18. vector de tupla y initializer_list
- 19. composición del proceso y excepciones
- 20. Haskell: composición de la función acaba de mi cerebro dañado
- 21. Haskell: Usando el mapa en la composición de la función
- 22. Tupla y conversión de lista recursiva
- 23. implementación de composición y agregación en C#?
- 24. Composición de funciones en Java
- 25. error de tipo 2 con rangos de tipos y composición de la función
- 26. Recuperar argumentos de la función como una tupla en C++
- 27. Tupla declaración de parámetros y rareza
- 28. Composición de funciones en C++
- 29. composición con operador diádica?
- 30. Código completo 2ed, composición y delegación