在Wiki page for Sudoku solutions中,一种解决方案声称使用“点黑客”。链接的Github页面不再可用,我也找不到任何关于elewhere的信息。
这是关于什么的?是干什么的呢?多么?
发布于 2012-06-29 16:37:56
我猜他指的是下面这行:
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-29 16:33:36
它使用的是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在那个节目里。
https://stackoverflow.com/questions/11258364
复制相似问题