Apa cara terpendek kita dapat mengekspresikan fungsi
f(a,b)(c,d)=(a+c,b+d)
dalam notasi point-free?
pointfree.io memberi kita
uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+))
yang dengan sedikit kerja bisa disingkat
uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+)
untuk 76 byte. Tapi ini sepertinya masih sangat panjang dan kompleks untuk tugas yang sederhana. Apakah ada cara kami dapat mengekspresikan penambahan berpasangan sebagai fungsi bebas titik yang lebih pendek?
Agar jelas dengan apa yang saya maksud dengan point-free, deklarasi point-free dari suatu fungsi melibatkan pengambilan fungsi dan operator yang ada dan menerapkannya satu sama lain sedemikian rupa sehingga fungsi yang diinginkan dibuat. Backticks, kurung dan nilai-nilai literal ( []
, 0
, [1..3]
, dll) diperbolehkan, tetapi kata kunci seperti where
dan let
tidak. Ini berarti:
Anda tidak boleh menetapkan variabel / fungsi apa pun
Anda tidak boleh menggunakan lambdas
Anda tidak boleh mengimpor
(+)***(+)
.
(+)<$>([1],2)<*>([3],4)
memberi ([1,3],6)
.