数独ソリューションのWiki ページでは、1 つのソリューションが「ドット ハック」を使用すると主張しています。リンクされた Github ページはもう利用できず、どこにもそれについて何も見つかりませんでした。
これは何についてですか?それは何をするためのものか?どのように?
数独ソリューションのWiki ページでは、1 つのソリューションが「ドット ハック」を使用すると主張しています。リンクされた Github ページはもう利用できず、どこにもそれについて何も見つかりませんでした。
これは何についてですか?それは何をするためのものか?どのように?
彼は次の行を参照していると思います。
import Prelude hiding ((.))
(.)
これにより、関数合成の通常の演算子が無効になります。代わりに、おそらくユーティリティ モジュールからインポートされた、同じ名前の別の演算子が使用されますT.T
。この演算子は、OOP 言語のように動作します。
pretty_output solution = solution.elems.map(show).in_group_of(9)
.map(unwords).unlines
これは(私が思うに)通常は次のようになります
pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution
その演算子は|>
、F# の演算子と同じように機能します。
(|>) :: a -> (a -> b) -> b
x |> f = f x
関数を介して値をパイプするために使用されます(より読みやすく、より機能的なスタイルです、imo):
pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines
(|>)
も同様flip ($)
です。
編集: この「ハッキングされた」演算子は、どういうわけか Haskell に既に存在します。の左から右への合成演算子によって、同じ合成動作を実現できますControl.Category
。
g x = x |> (f1 >>> f2 >>> f3)
ただし、これは機能するだけのパイプであり、実際には単なるf >>> g = g . f
.
OOPスタイルを使用しています
thing.method
thing
通常の代わりに関数を呼び出す
method thing
例を参照してください
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
その番組で。