Wiki page for Sudoku solutionsでは、1つの解決策が「ドットハック」を使用すると主張している。リンクされたGithubのページはもう利用できず、私はそれについて何も見つけられませんでした。ハスケル「ドットハック」
これは何についてですか?それは何をするためのものか?どうやって?
Wiki page for Sudoku solutionsでは、1つの解決策が「ドットハック」を使用すると主張している。リンクされたGithubのページはもう利用できず、私はそれについて何も見つけられませんでした。ハスケル「ドットハック」
これは何についてですか?それは何をするためのものか?どうやって?
私は彼が次の行を参照することだと思う:
import Prelude hiding ((.))
機能的組成物のための通常の(.)
オペレータを無効にします。その代わりに、おそらくユーティリティモジュールT.T
からインポートされた同じ名前の別の演算子が使用されます。通常
pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution
その演算子のようになります(と思う)
pretty_output solution = solution.elems.map(show).in_group_of(9)
.map(unwords).unlines
F#で|>
オペレータのように同じように動作します:この演算子は、OOP言語のように振る舞う
(|>) :: a -> (a -> b) -> b
x |> f = f x
これは、関数を介して値をパイプに使用されています(そして、より読みやすく、より機能的なスタイル、imo):
pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines
(|>)
もflip ($)
と同じです。
編集:この "ハッキングされた"演算子はすでにハスケルに存在しています。しかし
g x = x |> (f1 >>> f2 >>> f3)
このパイプのみ機能、および実際にはf >>> g = g . f
ある:同じ組成の動作はControl.Category
から左から右への組成物のオペレータによって達成することができます。
[this](http://stackoverflow.com/q/1457140/1346276)も読んで、両方のバージョンでいくつかの問題を扱いたいかもしれません。 – phg
ではなく通常の
method thing
のthing
上の機能を呼び出すことがOOPスタイル
thing.method
を使用していますが、そのプログラムで
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
例えば参照してください。
.hackシリーズに関連しているのだろうかと思います。 – Pubby