将函数定义更改为无点样式

And*_*Ali 3 haskell functional-programming pointfree

我在编写我的教授给我的代码时遇到了麻烦:

编写一个函数digit7,该函数接受Int并返回一个Bool说明7是否是其中一个数字.(提示:用于show将数字转换为字符列表.)digit7用于创建无参数的函数,该函数square7返回最小数字,其正方形包含7作为数字.

我的代码是:

digit7 l = elem '7' (show l)
Run Code Online (Sandbox Code Playgroud)

这有效,但是,我需要以无点样式编写的代码.我也很难搞清楚这个square7功能.

Nay*_*uki 5

对于该digit7函数,您可以使用函数组合将定义转换为无点样式:

digit7 = (elem '7') . (show)
Run Code Online (Sandbox Code Playgroud)

这是因为:

   digit7 l
-> ((elem '7') . (show)) l     By substitution
-> (elem '7') ((show) l)       By definition of (.)
-> elem '7' (show l)           By operator precedence
Run Code Online (Sandbox Code Playgroud)

至于square7功能,我建议使用dropWhilehead.

  • 当然,这里的括号是不必要的,并且可能在惯用的Haskell中被省略,因此定义只是'elem'7'.show`. (3认同)