2013-10-04 22 views
8

Diciamo che abbiamo questa funzione senza punti:f1 = flip mappa const. Come funziona questa funzione?

f1 = flip const map 

Sono all'oscuro su come esattamente funziona ea che cosa dovrebbe fare? I.e. So quali sono le funzioni map, const e flip. Ma metterli insieme in questo modo non ha senso per me. Cosa sta succedendo esattamente all'interno di questa funzione? Sembra che restituisca sempre la stessa cosa, ma ... Perché?

risposta

5

Ricordare che tutte le funzioni in Haskell accettano un solo argomento ma simulano l'assunzione di più argomenti restituendo un'altra funzione. Quindi flip const map può anche essere scritto come (flip const) map. const normalmente ignora il suo secondo argomento e restituisce il primo argomento. flip inverte l'ordine degli argomenti, quindi flip const ignora il primo argomento e restituisce il secondo argomento. Quindi map viene ignorato e viene restituita una funzione che restituisce sempre il suo argomento.

4

Non importa se si inserisce qualcosa di diverso da map. L'espressione flip const ribalta gli argomenti di const, quindi invece di restituire sempre il primo argomento, restituisce il suo secondo. Puoi testare questo ridefinendo f1 = flip const undefined. Ciò si tradurrà in un'eccezione se viene valutato sempre il valore undefined, ma è possibile notare che esso fornisce lo stesso comportamento. In sostanza, flip const undefined = id.

14

Vediamo cosa fa questa funzione, a poco a poco

flip const map x = (flip const) map x 
       = const x map 
       = x 

Ecco perché restituisce sempre ciò che si dà!