La composizione della funzione di Haskell è un'istanza del modello architettonico di pipe & filter


9

Il modello architettonico pipe & filter è definito come una catena di elementi di elaborazione, disposti in modo tale che l'output di ciascun elemento sia l'input del successivo . Ogni esempio sembra considerare la connessione tra processi o tra thread eseguita attraverso un qualche tipo di buffer condiviso.

A me sembra che la composizione della funzione Haskell stia eseguendo lo stesso compito. Possiamo dire che è un'istanza di questo modello anche se si tratta solo di ordinare le funzioni e non viene utilizzato nessun buffer esplicito come pipe? Se sì, possiamo dire la stessa cosa per un linguaggio non pigro?

Risposte:


8

Sono collegati, ma la connessione è il contrario (una specie di).

La composizione del morfismo in una categoria appropriata modella accuratamente sia la composizione della funzione (dove la categoria è Setper un linguaggio rigoroso che CPOper un linguaggio pigro) sia la composizione del processo (dove la categoria è la categoria (AFAIK, senza nome) in cui gli oggetti sono stringhe, i morfismi sono shell processi e composizione è l'operatore pipe). I processi di shell possono essere visti, senza perdita di generalità o accuratezza, come funzioni (pigre) di tipo String -> WriterT String IO String, e le funzioni pure di tipo String -> Stringpossono essere convertite senza perdita in e da funzioni di tipo String -> Identity String, quindi entrambi sono davvero (>>=)sotto mentite spoglie.


1
Che cos'è una CPOcategoria? Il mio google-fu è debole :(
Andres F.

3
@AndresF. La categoria di Complete Parziale Orders.
Ptharien's Flame,

2

C'è una differenza. Tubi e filtri si occupano di connessioni dati e dati, mentre Composizione funzioni Haskell si occupa di funzioni di prima classe . Le funzioni di prima classe sono componibili in modi diversi da pipe e filtri.

Ulteriori letture
Cosa significa compositività nel contesto della programmazione funzionale?


1
La composizione non si occupa necessariamente di una funzione di prima classe, in quanto la composizione è essa stessa una funzione di prima classe. Prendiamo ad esempio la composizione della funzione ++, dove la composizione è ., ++ . ++prenderebbe un valore e restituirebbe quel valore incrementato due volte, ma ++non è una funzione di prima classe, prende solo un valore e restituisce un valore. La funzione di composizione è la funzione di prima classe che accetta due funzioni e ne restituisce una.
Jimmy Hoffa,

1
@JimmyHoffa, penso che stai confondendo il concetto di "funzione di prima classe" con "funzione di ordine superiore". Quando una lingua ha "funzioni di prima classe", considera le stesse funzioni di altri tipi di dati di prima classe; possono essere passati e restituiti da funzioni, archiviati in strutture di dati, ecc. Una funzione di ordine superiore sfrutta la natura di prima classe delle funzioni prendendo parametri di funzione e / o restituendo valori di funzione.
Levi Pearson,

@LeviPearson sì, devo aver accidentalmente messo il cervello da parte quando mi sono alzato la mattina in cui ho scritto quel commento. Se continuerai a frugare qui scrivendo buoni contenuti per P.SE, medita al minimo nella chat generale di P.SE
Jimmy Hoffa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.