首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell "Dot Hack“

Haskell "Dot Hack“
EN

Stack Overflow用户
提问于 2012-06-29 16:19:20
回答 2查看 443关注 0票数 5

Wiki page for Sudoku solutions中,一种解决方案声称使用“点黑客”。链接的Github页面不再可用,我也找不到任何关于elewhere的信息。

这是关于什么的?是干什么的呢?多么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-29 16:37:56

我猜他指的是下面这行:

代码语言:javascript
复制
import Prelude hiding ((.))

这禁用了用于函数组合的普通(.)运算符。相反,使用另一个具有相同名称的操作符,该操作符可能是从实用程序模块T.T导入的。此操作符的行为类似于OOP语言中的行为:

代码语言:javascript
复制
pretty_output solution = solution.elems.map(show).in_group_of(9)
    .map(unwords).unlines

这(我认为)通常看起来像

代码语言:javascript
复制
pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution

该运算符的工作方式与F#中的|>运算符相同:

代码语言:javascript
复制
(|>) :: a -> (a -> b) -> b
x |> f = f x

它用于通过函数传递值(更具可读性且更好的函数式风格,imo):

代码语言:javascript
复制
pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines

(|>)也与flip ($)相同。

编辑:这个“被黑”的操作符在Haskell中已经存在了。Control.Category中的从左到右的复合运算符可以实现相同的复合行为

代码语言:javascript
复制
g x = x |> (f1 >>> f2 >>> f3)

然而,这个管道只起作用,而且实际上只是f >>> g = g . f

票数 6
EN

Stack Overflow用户

发布于 2012-06-29 16:33:36

它使用的是OOP风格

代码语言:javascript
复制
thing.method

thing上调用函数,而不是通常的

代码语言:javascript
复制
method thing

请参见示例

代码语言:javascript
复制
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

在那个节目里。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11258364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档