在Sudoku解决方案的Wiki页面中,一个解决方案声称使用"Dot Hack".链接的Github页面不再可用,我找不到任何关于它的信息.
这是关于什么的?它有什么作用?怎么样?
我猜他指的是以下行:
import Prelude hiding ((.))
Run Code Online (Sandbox Code Playgroud)
这会禁用(.)功能组合的正常操作符.而是使用另一个具有相同名称的运算符,可能是从实用程序模块导入的T.T.此运算符的行为与OOP语言类似:
pretty_output solution = solution.elems.map(show).in_group_of(9)
.map(unwords).unlines
Run Code Online (Sandbox Code Playgroud)
(我认为)通常会是这样的
pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution
Run Code Online (Sandbox Code Playgroud)
该运算|>符与F#中的运算符一样工作:
(|>) :: a -> (a -> b) -> b
x |> f = f x
Run Code Online (Sandbox Code Playgroud)
用于通过函数管道值(并且更具可读性和更好的功能样式,imo):
pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines
Run Code Online (Sandbox Code Playgroud)
(|>)也是一样的flip ($).
编辑:这个"黑客"操作符已经存在于Haskell中,不知何故.左向右组合操作员可以通过以下方式实现相同的组合行为Control.Category:
g x = x |> (f1 >>> f2 >>> f3)
Run Code Online (Sandbox Code Playgroud)
这个管道只起作用,实际上只是f >>> g = g . f.
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |