这是我写的:
(take 2 (repeat " "))
我想将其更改为不带括号的 expr。
我可以用吗 ”。” 像这样:
ceiling (negate (tan (cos (max 50 x))))
可以改为
ceiling . negate . tan . cos . max 50
但我试过(take 2) . (repeat " ")
两者(take . (repeat " ")) 2
都不起作用?
有人帮忙吗?
这是我写的:
(take 2 (repeat " "))
我想将其更改为不带括号的 expr。
我可以用吗 ”。” 像这样:
ceiling (negate (tan (cos (max 50 x))))
可以改为
ceiling . negate . tan . cos . max 50
但我试过(take 2) . (repeat " ")
两者(take . (repeat " ")) 2
都不起作用?
有人帮忙吗?
take 2 $ repeat " "
或者
take 2 . repeat $ " "
或者
take 2 . cycle $ [" "]
但你真正想要的是:
replicate 2 " "
正如您在上面所要求的,这包括拍摄和重复。
replicate :: Int -> a -> [a]
replicate n x = take n $ repeat x
你想要的是
take 2 . repeat $ " "
.
组成函数。所以在这里我们组成take 2
and repeat
。要转换更大的东西:
a b c (d e f (g h i))
a b c . d e f. g h $ i
您组合了所有函数和最内层函数的部分应用(此处g h i
)以及除最后一个参数之外的所有函数。这将创建一个从最后一个参数到最终结果的大函数。
然后我们应用这个函数,$
以便优先级是正确的。正如您所发现的,由于$
只是具有不同优先级的应用程序,您可以只用括号分组。但我个人更喜欢$
.
好的,(take 2 . repeat) " "
这行得通。
您似乎想使用(.)
,并且已经发布了这样做的方法,但是如果您只想删除括号,那么就take 2 $ repeat " "
可以了。($)
运算符允许您通过将随附的开放括号替换为($)
.