có vẻ là cách toán học hơn
ngôn ngữ chức năng được lấy cảm hứng từ tính toán lambda . Trong trường này, dấu ngoặc đơn không được sử dụng cho ứng dụng hàm.
Tôi cũng nghĩ rằng phong cách sau rõ ràng và dễ đọc hơn nhiều so với không có parens.
Khả năng đọc là trong mắt của kẻ si tình. Bạn không quen đọc nó. Nó hơi giống như các toán tử toán học. Nếu bạn hiểu tính kết hợp, bạn chỉ cần một vài parens để làm rõ cấu trúc biểu thức của bạn. Thường thì bạn không cần chúng.
Currying cũng là một lý do tốt để sử dụng quy ước này. Trong haskell, bạn có thể định nghĩa như sau:
add :: Int -> Int -> Int
add x y = x + y
x = add 5 6 -- x == 11
f = add 5
y = f 6 -- y == 11
z = ((add 5) 6) -- explicit parentheses; z == 11
Với parens, bạn có thể sử dụng hai quy ước: f(5, 6)
(không được chế biến) hoặc f(5)(6)
(được cung cấp). Cú pháp haskell giúp làm quen với khái niệm currying. Bạn vẫn có thể sử dụng phiên bản không bị quấy rối, nhưng sẽ khó khăn hơn khi sử dụng nó với các tổ hợp
add' :: (Int, Int) -> Int
add' (x, y) = x + y
u = add'(5, 6) -- just like other languages
l = [1, 2, 3]
l1 = map (add 5) l -- [6, 7, 8]
l2 = map (\x -> add'(5, x)) l -- like other languages
Lưu ý cách phiên bản thứ hai buộc bạn phải đăng ký x dưới dạng một biến và biểu thức con là một hàm lấy một số nguyên và thêm 5 vào đó? Phiên bản curried nhẹ hơn nhiều, nhưng cũng được nhiều người coi là dễ đọc hơn.
Các chương trình Haskell sử dụng rộng rãi ứng dụng một phần và các tổ hợp như một phương tiện để xác định và soạn thảo trừu tượng, vì vậy đây không phải là một ví dụ về đồ chơi. Một giao diện chức năng tốt sẽ là một trong đó thứ tự của các tham số cung cấp cách sử dụng thân thiện.
Một điểm khác: một hàm không có tham số nên được gọi với f()
. Trong haskell, vì bạn chỉ thao tác các giá trị được đánh giá lười biếng bất biến, bạn chỉ cần viết f
và coi đó là một giá trị sẽ cần thực hiện một số tính toán khi cần. Vì đánh giá của nó sẽ không có bất kỳ tác dụng phụ nào, nên sẽ không có ý nghĩa gì khác về hàm không tham số và giá trị trả về của nó.
Ngoài ra còn có các quy ước khác cho ứng dụng chức năng:
- Lisp: (fx) - tiền tố có dấu ngoặc đơn bên ngoài
- Forth: xf - hậu tố