2012-04-28 16 views
8

veces vi algunos ejemplos de código con la siguiente expresión:¿Qué significa apóstrofo en Haskell?

example = example' [] 

o lo que es la diferencia entre:

foldl 
    foldl' 

Gracias

+0

checkout también mi respuesta sobre el operador infijo aquí: http://stackoverflow.com/a/29894487/1874049 –

Respuesta

17

' es simplemente otro carácter identificador como cualquier otro. foldl' es una función completamente separada de foldl; bien podría llamarse strictFold. Se llama así porque está estrechamente relacionado con foldl: es un foldl donde se evalúa el acumulador en cada paso, de modo que no se acumulan grandes thunk. Por ejemplo, foldl (+) 0 desbordará la pila en una lista grande, pero foldl' (+) 0 no lo hará.

En general, la sufijación de un ' significa una de tres cosas: foo' es o bien una definición de ayuda presentada con la finalidad de definir foo, una versión modificada de foo (es decir, state, state', y state'' podría ser una estado inicial y dos versiones actualizadas), o una versión estricta de foo.

+4

Además, se lee "primer". –

+4

Respondió esta pregunta en unos 3 minutos después de preguntar cuál puede ser el tiempo necesario para escribirlo. Lo vi y dije "hey una pregunta de Haskell a la que puedo responder y a la que nadie ha respondido todavía, traiga el tren de rep", y voy escribiendo la respuesta cuando aparece una nueva respuesta de un representante de 20k que me dice lo que estaba a punto de decir. Ustedes, expertos, deberían dejar algunas preguntas en paz para tipos como nosotros ... :) –

+0

@CodingTales, ¡respondan de todos modos! Puede explicarlo de forma ligeramente diferente, ¡y la variedad siempre es buena! :) – huon

2

En Haskell es simplemente otro personaje para distinguir los identificadores y el identificador se llama fold prime, pero se usa comúnmente de la misma manera que it used in mathematics.

3

nada, al menos no en ese contexto, ya que un apóstrofe es un carácter identificador válido (ver this answer de algo más de detalle.)

Es un poco de una convención en las bibliotecas estándar que una versión estricta de ciertas funciones se diferencian de la versión estándar (diferida) por un apóstrofo, como foldl' (estricto) y foldl (flojo). Esto no tiene nada que ver con el apóstrofo siendo especial, es solo una convención.

0

Hay un módulo de hackage (no recuerdo cuál) que incluye algún tipo de prueba de membresía (o algún otro predicado) en algo. La función de prueba se llama "es":

foo x | x `is` whatever = ... 

y por conveniencia también se proporciona la negación de la función booleana:

bar x | x `isn't` whatever = ... 

pensé que era divertido como diablos cuando vi por primera vez. Apostrophe es solo otro personaje en el identificador.

+0

Aún no he encontrado la documentación de esta característica, pero acabo de encontrar esta característica de haskell: en su caso supongo que la función se llama '' 'is''' sin el apóstrofo y está destinada a ser utilizada como que: '' 'es x lo que sea'''. ¡pero con el apóstrofo se puede usar como lo usaste! Si alguien pudiera proporcionar algún enlace sobre cómo se puede usar esto en detalle, ¡eso sería realmente bueno! –

+0

lo encontró: https://wiki.haskell.org/Infix_operator –