我正在尝试更改
function (x:xs) = unwords (map reverse (words (x:xs)))
点自由风格,我不能这样做。
不是简单的
function = unwords . map . reverse . words
请帮助我将此更改为免费样式。
我在下面的命令行
之后尝试使用了pointfreecabal install pointfree
所有编译和安装的东西,但是当我在终端中键入pointfree时,它一直说没有这样的东西。
答案 0 :(得分:8)
你的定义几乎是正确的,可以在ghci解释器中测试,它应该是
ghci> let function = unwords . map reverse . words
ghci> function "The quick brown fox"
"ehT kciuq nworb xof"
因为reverse
是map的参数。基本上,要将类似管道的函数foo a3 = f a1 (g a2 (h a3))
(由嵌套函数调用组成)更改为pointfree,其中显式参数(在本例中为a3
)是最后一次调用,您需要删除它并替换嵌套带.
合成运算符的括号:foo = f a1 . g a2 . h
。但是,当有多个参数或参数被多次使用时,此技巧不起作用。要明确地使用无点函数进行操作,您应该理解
combinatory logic
答案 1 :(得分:2)
reverse
是map
的参数,因此您无需使用map
撰写reverse
,但您想要撰写完整的map reverse
与其他功能。
正确的方法是:
function = unwords . map reverse . words