5

数独ソリューションのWiki ページでは、1 つのソリューションが「ドット ハック」を使用すると主張しています。リンクされた Github ページはもう利用できず、どこにもそれについて何も見つかりませんでした。

これは何についてですか?それは何をするためのものか?どのように?

4

2 に答える 2

6

彼は次の行を参照していると思います。

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.

于 2012-06-29T08:37:56.417 に答える
4

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

その番組で。

于 2012-06-29T08:33:36.463 に答える