¿Cuál es la forma más corta en que podemos expresar la función?
f(a,b)(c,d)=(a+c,b+d)
en notación sin punto?
pointfree.io nos da
uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+))
que con un poco de trabajo se puede acortar a
uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+)
por 76 bytes. Pero esto todavía parece muy largo y complejo para una tarea tan simple. ¿Hay alguna forma de expresar la suma por pares como una función sin puntos más corta?
Para que quede claro lo que quiero decir con punto libre, una declaración de punto libre de una función implica tomar funciones y operadores existentes y aplicarlos entre sí de tal manera que se cree la función deseada. Acentos abiertos, paréntesis y valores literales ( []
, 0
, [1..3]
, etc.) son permitidos, pero como palabras clave where
y let
no lo son. Esto significa:
No puede asignar ninguna variable / función
No puedes usar lambdas
No puedes importar
(+)***(+)
.
(+)<$>([1],2)<*>([3],4)
da ([1,3],6)
.