simbolo signo significa rayas que peso este estadounidense dólar dolar dinero costo con chileno argentina haskell syntax

haskell - significa - ¿Cuál es la diferencia entre $(dólar) y $!(signo de exclamación de dólar)



simbolo del dolar en argentina (2)

Ver la función seq , que obliga a la evaluación de un valor. ps se define en términos de seq.

This es una publicación de blog que muestra algunos matices de su uso.

¿Alguien puede explicar la diferencia en Haskell entre los operadores ($) y ($!) (Signo de dólar frente a signo de exclamación de signo de dólar)?

¡No he visto el uso de $! en cualquier lugar hasta el momento, pero al navegar a través de la referencia Haskell, noté su existencia y que tiene exactamente la misma definición que $ . Al intentar algunas afirmaciones simples en un intérprete de Haskell ( GHCi ), no pude encontrar ninguna diferencia, ni pude encontrar ninguna referencia al operador en los tutoriales enumerados cuando haskell tutorial .

Entonces, solo por curiosidad, ¿cuál es la diferencia, si es que lo hace?


($!) es una aplicación de función estricta. Es decir, evalúa el argumento antes de evaluar la función.

Esto es contrario a la aplicación de función diferida normal en Haskell, por ejemplo, fx o f $ x , que primero comienzan a evaluar la función f , y solo calculan el argumento x si es necesario.

Por ejemplo, succ (1 + 2) retrasará la suma de 1 + 2 creando un procesador de segundo plano, y comenzará a evaluar succ primero. Solo si se necesita el argumento para succ, se evaluará 1 + 2 .

Sin embargo, si está seguro de que el argumento para una función siempre será necesario, puede usar ($!) , Que primero evaluará el argumento en forma normal de cabeza débil, y luego ingresará la función. De esta forma, no creas una gran pila de thunks y esto puede ser más eficiente. En este ejemplo, succ $! 1 + 2 succ $! 1 + 2 primero calcularía 3 y luego ingresaría la función succ .

Tenga en cuenta que no siempre es seguro simplemente reemplazar la aplicación de función normal con la aplicación de función estricta. Por ejemplo:

ghci> const 1 (error "noo!") 1 ghci> const 1 $! (error "noo!") *** Exception: noo!