関数を表現できる最短の方法は何ですか
f(a,b)(c,d)=(a+c,b+d)
ポイントフリー表記で?
pointfree.ioは私たちに与えます
uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+))
少しの作業で短縮できます
uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+)
76バイト。しかし、これは、そのような単純なタスクにとっては依然として非常に長く複雑です。ペアワイズ加算をより短いポイントフリー関数として表現する方法はありますか?
関数のポイントフリー宣言の意味を明確にするために、関数のポイントフリー宣言には、既存の関数と演算子を使用し、目的の関数が作成されるようにそれらを相互に適用することが含まれます。バッククォート、括弧やリテラル値([]
、0
、[1..3]
、など)が許可されますが、キーワードは次のようにしているwhere
とlet
はありません。これの意味は:
変数/関数を割り当てることはできません
ラムダは使用できません
インポートできません
(+)***(+)
。
(+)<$>([1],2)<*>([3],4)
与え([1,3],6)
ます。