що здається більш математичним способом
функціональні мови натхненні обчисленням лямбда . У цьому полі дужки не використовуються для застосування функції.
Я також вважаю, що останній стиль набагато чіткіший і зрозуміліший, ніж без паронів.
Читання - в очах глядача. Ви не звикли його читати. Це трохи схоже на математичні оператори. Якщо ви розумієте асоціативність, вам потрібно лише кілька паронів, щоб уточнити структуру вашого вираження. Часто вони вам не потрібні.
Каррі - це також вагомий привід використовувати цю умову. У haskell ви можете визначити наступне:
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
З паронами ви можете використовувати дві умовні позначення: f(5, 6)
(не криво) або f(5)(6)
(каррі). Синтаксис haskell допомагає звикнути до поняття currying. Ви все ще можете скористатися версією, яка не випробовується, але більш боляче використовувати її з комбінаторами
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
Зауважте, як друга версія примушує вас зареєструвати х як змінну, і що субдекспресія є функцією, яка приймає ціле число і додає до неї 5? Вироблена версія набагато легша, але багато хто також вважається читабельнішою.
Програми Haskell широко використовують часткове застосування та комбінатори як засіб визначення та складання абстракцій, тому це не є прикладом іграшок. Хорошим функціональним інтерфейсом буде той, де порядок параметрів забезпечує доброзичливе використання.
Ще один момент: функцію без параметрів слід викликати за допомогою f()
. У haskell, оскільки ви маніпулюєте лише незмінними оціненими ледачими значеннями, ви просто записуєте f
і розглядаєте це як значення, яке потрібно буде виконати за допомогою деяких обчислень. Оскільки його оцінка не матиме жодних побічних ефектів, немає сенсу мати інше позначення функції без параметрів та її поверненого значення.
Існують також інші умови для застосування функції:
- Lisp: (fx) - префікс із зовнішніми дужками
- Далі: xf - постфікс