En el Wiki page for Sudoku solutions, una solución afirma utilizar el "Dot Hack". La página vinculada de Github ya no está disponible y no pude encontrar nada al respecto.Haskell "Dot Hack"
¿De qué se trata? ¿Qué hace? ¿Cómo?
En el Wiki page for Sudoku solutions, una solución afirma utilizar el "Dot Hack". La página vinculada de Github ya no está disponible y no pude encontrar nada al respecto.Haskell "Dot Hack"
¿De qué se trata? ¿Qué hace? ¿Cómo?
supongo que se está refiriendo a la siguiente línea:
import Prelude hiding ((.))
que desactiva el (.)
operador normal para composición funcional. En su lugar, se usa otro operador con el mismo nombre, probablemente importado del módulo de utilidad T.T
. Este operador se comporta como en lenguajes de POO:
pretty_output solution = solution.elems.map(show).in_group_of(9)
.map(unwords).unlines
la que (creo) que normalmente se verá como
pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution
Ese operador funciona de la misma como el operador |>
en Fa #:
(|>) :: a -> (a -> b) -> b
x |> f = f x
que se utiliza para tubería un valor a través de funciones (y es más legible y mejor estilo funcional, imo):
pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines
(|>)
es también el mismo que flip ($)
.
Editar: Este operador "pirateado" ya existe en Haskell, de alguna manera. El mismo comportamiento composición se puede lograr mediante el operador de composición de izquierda a derecha desde Control.Category
: sólo
g x = x |> (f1 >>> f2 >>> f3)
Este tuberías funciones, sin embargo, y es en realidad sólo f >>> g = g . f
.
También le gustaría leer [this] (http://stackoverflow.com/q/1457140/1346276), tratando algunos problemas con ambas versiones. – phg
Se trata de utilizar el estilo de programación orientada a objetos
thing.method
para llamar a funciones en thing
en lugar del habitual
method thing
Véase, por ejemplo
row i = i `div` 9
col i = i `mod` 9
row_list i positions = positions.select(on_i_row) where
on_i_row pos = pos.row == i.row
col_list i positions = positions.select(on_i_col) where
on_i_col pos = pos.col == i.col
en ese programa.
Me pregunto si está relacionado con la serie .hack. – Pubby