restas restar reagrupar reagrupacion números menos dígitos con como cifras haskell pointfree

haskell - restar - ¿Cuál es el equivalente a(+1) para la resta, ya que(-1) se ve como un número negativo?



restar números de 3 dígitos reagrupar 1 (3)

Posible duplicado:
Resta de curry

Comencé mi primer proyecto de haskell que no es de un tutorial, y por supuesto me tropiezo con las cosas más simples.

Tengo el siguiente código:

moveUp y = modifyMVar_ y $ return . (+1) moveDn y = modifyMVar_ y $ return . (-1)

Me tomó algo de tiempo entender por qué mi código no se compilaba: había usado (-1), que se ve como uno negativo. Poner el símbolo de menos entre paréntesis no ayuda, ya que lo prefija y hace de 1 su primer parámetro.

En resumen, ¿cuál es la versión libre de puntos de esto?

dec :: Num a => a -> a dec x = x - 1


Creo que quieres la función de subtract convenientemente nombrada , que existe exactamente por la razón que has descubierto:

subtract :: Num a => a -> a -> a

lo mismo que flip (-) .

Debido a que - se trata especialmente en la gramática de Haskell, (- e) no es una sección, sino una aplicación de negación de prefijo. Sin embargo, (subtract exp) es equivalente a la sección no permitida.

Si desea escribirlo sin puntos sin usar una función como subtract , puede usar flip (-) , como lo menciona la documentación de Prelude . Pero eso es ... algo feo.


Puede utilizar la función de subtract (que se encuentra en el Preludio estándar).

moveDn y = modifyMVar_ y $ return . (subtract 1)

También puede usar voltear para reordenar los parámetros que toma.

moveDn y = modifyMVar_ y $ return . (flip (-) 1)


Si la subtract mencionada anteriormente es demasiado detallada, podría intentar algo como (+ (-1)) o (-1 +) .