che sembra essere il modo più matematico
i linguaggi funzionali sono ispirati dal calcolo lambda . In questo campo, le parentesi non vengono utilizzate per l'applicazione delle funzioni.
Penso anche che quest'ultimo stile sia molto più chiaro e leggibile che senza i genitori.
La leggibilità è negli occhi di chi guarda. Non sei abituato a leggerlo. È un po 'come gli operatori matematici. Se capisci l'associatività, hai solo bisogno di alcune parentesi per chiarire la struttura della tua espressione. Spesso non ne hai bisogno.
Currying è anche un buon motivo per usare questa convenzione. In haskell, puoi definire quanto segue:
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
Con le parentesi puoi usare due convenzioni: f(5, 6)(non al curry) o f(5)(6)(al curry). La sintassi haskell aiuta ad abituarsi al concetto di curry. Puoi comunque utilizzare una versione non curry, ma è più doloroso usarla con i combinatori
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
Notare come la seconda versione ti costringe a registrare x come variabile e che la sottoespressione è una funzione che accetta un numero intero e ne aggiunge 5? La versione al curry è molto più leggera, ma è anche considerata da molti più leggibile.
I programmi di Haskell fanno ampio uso di applicazioni parziali e combinatori come mezzo per definire e comporre astrazioni, quindi questo non è un esempio giocattolo. Una buona interfaccia funzionale sarà quella in cui l'ordine dei parametri fornisce un uso intuitivo al curry.
Un altro punto: una funzione senza parametri dovrebbe essere chiamata con f(). In haskell, poiché manipoli solo valori valutati pigri immutabili, lo scrivi fe lo consideri come un valore che dovrà eseguire alcuni calcoli quando necessario. Poiché la sua valutazione non avrà alcun effetto collaterale, non ha senso avere una notazione diversa per la funzione senza parametri e il suo valore restituito.
Esistono anche altre convenzioni per l'applicazione delle funzioni:
- Lisp: (fx) - prefisso con parentesi esterne
- Avanti: xf - postfix