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 +)
.