Nel Wiki page for Sudoku solutions, una soluzione afferma di utilizzare "Dot Hack". La pagina Github collegata non è più disponibile e non sono riuscito a trovare nulla al riguardo.Haskell "Dot Hack"
Di cosa si tratta? Che cosa fa? Come?
Nel Wiki page for Sudoku solutions, una soluzione afferma di utilizzare "Dot Hack". La pagina Github collegata non è più disponibile e non sono riuscito a trovare nulla al riguardo.Haskell "Dot Hack"
Di cosa si tratta? Che cosa fa? Come?
Credo che abbia riferimento alla seguente riga:
import Prelude hiding ((.))
che disabilita la normale (.)
operatore per la composizione funzionale. Invece, viene utilizzato un altro operatore con lo stesso nome, probabilmente importato dal modulo di utilità T.T
. Questo operatore si comporta come in linguaggi OOP:
pretty_output solution = solution.elems.map(show).in_group_of(9)
.map(unwords).unlines
che (credo) normalmente simile
pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution
Tale operatore funziona allo stesso modo come la |>
operatore in F #:
(|>) :: a -> (a -> b) -> b
x |> f = f x
che viene utilizzato per pipe un valore tramite le funzioni (ed è più leggibile e migliore stile funzionale, imo):
pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines
(|>)
è lo stesso di flip ($)
.
Modifica: questo operatore "compromesso" esiste già in Haskell, in qualche modo. Lo stesso comportamento composizione può essere ottenuto dall'operatore composizione sinistra a destra da Control.Category
: solo
g x = x |> (f1 >>> f2 >>> f3)
This tubi funzioni, però, ed è in realtà solo f >>> g = g . f
.
Ti potrebbe interessare anche leggere [questo] (http://stackoverflow.com/q/1457140/1346276), trattando alcuni problemi con entrambe le versioni. – phg
E 'utilizzando lo stile OOP
thing.method
di chiamare funzioni thing
invece del solito
method thing
Si veda ad esempio
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
in quel programma.
Mi chiedo se è correlato alla serie .hack. – Pubby