1

ここに私が書くものがあります: (take 2 (repeat " "))

括弧なしで expr に変更したい。

使ってもいいですか "。" そのようです:

ceiling (negate (tan (cos (max 50 x))))に変更できます ceiling . negate . tan . cos . max 50

しかし、私は試しました(take 2) . (repeat " ")

両方とも(take . (repeat " ")) 2 機能しませんか?

誰か助けて?

4

4 に答える 4

10
take 2 $ repeat " " 

また

take 2 . repeat $ " "

また

take 2 . cycle $ [" "]

しかし、あなたが本当に欲しいのは:

replicate 2 " "

上記で求めたように、これはテイクとリピートの両方で構成されています。

replicate :: Int -> a -> [a]
replicate n x = take n $ repeat x
于 2013-09-04T06:06:41.467 に答える
7

あなたが欲しいのは

 take 2 . repeat $ " "

.関数を構成します。したがって、ここで and を構成take 2repeatます。より大きなものを変換するには:

a b c (d e f (g h i))
a b c . d e f. g h $ i

すべての関数と、最も内側の関数 (ここではg h i) の部分適用と、最後の引数以外のすべてを構成します。これにより、最後の引数から最終結果までの大きな関数が作成されます。

$次に、優先順位が正しくなるようにこの関数を適用します。あなたが発見したように、$は優先順位が異なるだけのアプリケーションであるため、括弧でグループ化できます。しかし、私は個人的に$.

于 2013-09-04T04:18:07.930 に答える
2

わかりました、(take 2 . repeat) " "これはうまくいきます。

于 2013-09-04T04:17:57.133 に答える
1

を使用したいよう(.)で、その方法はすでに投稿されていますが、括弧を削除したいだけであればtake 2 $ repeat " "機能します。演算子を使用すると、付随する開き括弧を . に置き換えることで、最後($)の閉じ括弧を削除できます。($)

于 2013-09-04T07:00:26.160 に答える