Cách ngắn nhất chúng ta có thể thể hiện chức năng là gì
f(a,b)(c,d)=(a+c,b+d)
trong ký hiệu không có điểm?
pointfree.io cho chúng tôi
uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+))
mà với một chút công việc có thể được rút ngắn thành
uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+)
cho 76 byte. Nhưng điều này dường như vẫn thực sự dài và phức tạp cho một nhiệm vụ đơn giản như vậy. Có cách nào chúng ta có thể diễn tả phép cộng theo cặp như một hàm không có điểm ngắn hơn không?
Để rõ ràng theo ý tôi muốn nói là không có điểm, một khai báo hàm không có điểm bao gồm lấy các hàm và toán tử hiện có và áp dụng chúng cho nhau theo cách mà hàm mong muốn được tạo. Backticks, ngoặc và các giá trị văn chương ( []
, 0
, [1..3]
, vv) được cho phép nhưng các từ khóa như where
và let
không. Điều này có nghĩa là:
Bạn không thể chỉ định bất kỳ biến / chức năng
Bạn không thể sử dụng lambdas
Bạn không được nhập
(+)***(+)
.
(+)<$>([1],2)<*>([3],4)
cho ([1,3],6)
.