me di cuenta de que yo estaba jugando con Haskell hoy que es posible hacer algo como
($ 4) (> 3)
que produce True
. ¿Que esta pasando aqui? Sería genial tener algo de intuición.
¿Mi conjetura? Parece que el ($ 4)
es una aplicación de función incompleta, pero cuando estoy confundido es que $
es un operador infijo, ¿no debería parecerse al (4 $)
? Esto no compila, tan claramente no, lo que me lleva a creer que realmente no entiendo lo que está pasando. El término (>3)
tiene sentido para mí, porque si proporciona algo como (\x -> x 4) (>3)
, termina con el mismo resultado.
Las respuestas son excelentes, pero me gustaría agregar que '(\' op \ 'e)' es azúcar sintáctica para '(\ x -> x \' op \ 'e)' y '(e \' op \ ')' for '(\ x -> e \' op \ 'x)', donde '\' op \ '' es operador (ya sea uno normal como '+', '-' etc, o función en backticks). – Vitus
lee '(f $)' como "_call the_ function f"; lea '($ 4)' como "_call with_ 4 como argumento". "Llamar con 4" "es mayor que 3?" es "¿4 es mayor que 3?". '($ 4) (> 3) == (> 3) 4 == 4> 3 == (4>) 3'. –