我想改变
function (x:xs) = unwords (map reverse (words (x:xs)))
Run Code Online (Sandbox Code Playgroud)
进入点自由风格,我不能这样做.
不是简单的
function = unwords . map . reverse . words
Run Code Online (Sandbox Code Playgroud)
请帮我改变这点自由风格.
我在下面的命令行后尝试使用pointfree
cabal install pointfree
Run Code Online (Sandbox Code Playgroud)
编译和安装的所有内容,但是当我在终端中键入pointfree时,它一直在说没有这样的东西.
你的定义几乎是正确的,可以在ghci解释器中测试,它应该是
ghci> let function = unwords . map reverse . words
ghci> function "The quick brown fox"
"ehT kciuq nworb xof"
Run Code Online (Sandbox Code Playgroud)
因为reverse是地图的一个参数.基本上,要将类似管道的函数foo a3 = f a1 (g a2 (h a3))(由嵌套函数调用组成)更改为pointfree,其中显式参数(a3在本例中)是最后一次调用,您需要删除它并用.组合运算符替换嵌套括号:foo = f a1 . g a2 . h.但是,当有多个参数或参数被多次使用时,此技巧不起作用.要明确地使用无点函数进行操作,您应该理解
组合逻辑.
编辑:哦,我得到你试图使用命令行pointfree工具自动转换功能.使用cabal编译的二进制文件放在特定目录中(例如,Windows中的C:\ Users\Username\AppData\Roaming\cabal\bin,AFAIR),默认情况下可能没有添加到PATH,因此命令行解释器可以'找到可执行文件.