เป็นวิธีที่สั้นที่สุดที่เราสามารถแสดงฟังก์ชั่นอะไร
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 ไบต์ แต่ตอนนี้ยังดูเหมือนว่ามันยาวและซับซ้อนสำหรับการดังกล่าวเป็นงานที่ง่าย มีวิธีใดบ้างที่เราสามารถแสดงการเพิ่มขึ้นของจำนวนคู่ในฐานะฟังก์ชั่นไร้จุดที่สั้นกว่าได้หรือไม่?
เพื่อให้ชัดเจนโดยสิ่งที่ฉันหมายถึงโดยไม่มีจุดการประกาศจุดของฟังก์ชั่นที่เกี่ยวข้องกับการมีฟังก์ชั่นที่มีอยู่และผู้ประกอบการและใช้พวกเขากับแต่ละอื่น ๆ ในลักษณะที่ฟังก์ชั่นที่ต้องการจะถูกสร้างขึ้น backticks วงเล็บและคุณค่าที่แท้จริง ( []
, 0
, [1..3]
ฯลฯ ) จะได้รับอนุญาต แต่คำหลักเช่นwhere
และlet
จะไม่ หมายความว่า:
คุณไม่สามารถกำหนดตัวแปร / ฟังก์ชั่นใด ๆ
คุณไม่สามารถใช้ lambdas
คุณไม่สามารถนำเข้า
(+)***(+)
เช่นนั้น
(+)<$>([1],2)<*>([3],4)
([1,3],6)