2012-06-29 12 views
5

Wiki page for Sudoku solutions, bir çözüm "Dot Hack" kullanmak için iddia ediyor. Bağlı Github sayfası artık kullanılamıyor ve başka bir yerde bulamadım.Haskell "Nokta Hack"

Bu nedir? Bu ne işe yarıyor? Nasıl? Bu NYP tarzı kullanıyor

+0

.hack dizisiyle ilgili olup olmadığını merak ediyorum. – Pubby

cevap

5

Onun şu hattına atıfta sanırım. Bunun yerine, muhtemelen aynı ada sahip başka bir operatör kullanılır, muhtemelen T.T hizmet modülünden alınır. Normalde

pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution 

O operatör gibi görünecektir (Sanırım)

pretty_output solution = solution.elems.map(show).in_group_of(9) 
    .map(unwords).unlines 

F # |> operatörü gibi aynı şekilde çalışır: Bu operatör NYP dillerinde gibi davranır

(|>) :: a -> (a -> b) -> b 
x |> f = f x 

numaralı boruya no'lu borulara fonksiyonlar aracılığıyla bir değer (ve daha okunaklı ve daha iyi fonksiyonel stil, imo):

pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines 

(|>) da flip ($) aynıdır.

Düzenleme: Bu "saldırıya uğramış" operatör, bir şekilde Haskell'de zaten var. gerçi

g x = x |> (f1 >>> f2 >>> f3) 

Bu borular sadece fonksiyonlar, ve aslında sadece f >>> g = g . f: Aynı kompozisyon davranışı Control.Category dan soldan sağa kompozisyon operatör tarafından elde edilebilir.

+0

Ayrıca, bu iki durumu da içeren bazı sorunları ele alan [this] (http://stackoverflow.com/q/1457140/1346276) adresini okumak isteyebilirsiniz. – phg

4

thing.method 

o programda

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 

Örneğin

için bakınız yerine her zamanki

method thing 

ait thing üzerinde işlevleri çağırmak için. Fonksiyonel kompozisyon normal (.) operatörü devre dışı bırakır

import Prelude hiding ((.)) 

: