Esiste un modo in Haskell per associare il secondo argomento ma non il primo di una funzione senza utilizzare le funzioni lambda o definire un'altra funzione "locale"?Come posso associare il secondo argomento in una funzione ma non il primo (in modo elegante)?
Esempio. Ho una funzione binaria come:
sub :: Int -> Int -> Int
sub x y = x - y
Ora, se voglio legare il primo argomento, posso farlo facilmente usando (sub someExpression):
mapSubFrom5 x = map (sub 5) x
*Main> mapSubFrom5 [1,2,3,4,5]
[4,3,2,1,0]
Questo funziona bene se voglio legare i primi n argomenti senza "gap".
Se voglio legare il secondo argomento, ma non il primo, le due opzioni sono a conoscenza sono più prolisso:
sia tramite un altro, locali, funzione:
mapSub5 x = map sub5 x
where sub5 x = sub x 5
*Main> mapSub5 [1,2,3,4,5]
[-4,-3,-2,-1,0]
o utilizzando lambda :
mapSub5 x = map (\x -> sub x 5) x
Mentre entrambi stanno lavorando bene, mi piace l'eleganza della "sub 5" e mi chiedo se c'è un modo simile eleganza di impegnare la n-esimo (n> 1) argomento di una funzione?
Poiché '-5' è un numero, i creatori di haskell hanno persino aggiunto una funzione' sottrazione' che è definita come 'sottrazione = flip (-)' in modo da poter scrivere 'map (sottrarre 5)'. È più leggibile, però. – fuz
Inoltre, un corollario alla nota finale: se si desidera applicare in modo parziale argomenti successivi a una funzione scritta dall'utente, non esitate a modificare direttamente l'ordine! È relativamente raro che una funzione abbia tre o più argomenti che sono tutti probabilmente utilizzati in questo modo. –