Perché le sequenze sono raccomandate come interfacce convenzionali?

3

Dal riferimento della versione di berkeley di sicp testo , Si dice che:

Expressing programs as sequence operations helps us design programs that are modular. That is, our designs are constructed by combining relatively independent pieces, each of which transforms a sequence. In general, we can encourage modular design by providing a library of standard components together with a conventional interface for connecting the components in flexible ways.

Ad esempio, in python, <class 'list'> e <class 'tuple'> sono alcuni dei tipi di modelli di dati sequenziali utilizzati per lo più per l'archiviazione.

Ad esempio, in python <class 'dict'> è un tipo popolare di modello di dati non sequenziali.

Il riferimento del testo fornisce sotto soluzioni scritte in python a due diversi problemi e menziona come soluzione simile, che non è convincente, perché questi due problemi non potrebbero essere il campione rappresentativo per prendere questa decisione.

>>> def sum_even_fibs(n):
        """Sum the even members of the first n Fibonacci numbers."""
        return sum(filter(iseven, map(fib, range(1, n+1))))
>>> sum_even_fibs(20)
3382
>>> def acronym(name):
        """Return a tuple of the letters that form the acronym for name."""
        return tuple(map(first, filter(iscap, name.split())))
>>> acronym('University of California Berkeley Undergraduate Graphics Group')
('U', 'C', 'B', 'U', 'G', 'G')

Non sono ancora chiaro sulla decisione di rendere "sequenze come interfacce convenzionali" nonostante questi esempi forniti.

Quindi, Nel progettare una libreria o un componente, perché i modelli di dati di tipo sequenziale si consiglia di essere scelti come interfacce convenzionali? È qualcosa che ha a che fare con la proprietà di chiusura di questi modelli di dati sequenziali (forniti da python / scheme / lisp) ?

Nota: lo stesso consiglio è dato nel testo SICP dal MIT premere

    
posta overexchange 25.05.2015 - 16:23
fonte

1 risposta

7

Lo scopo di un dizionario è di restituire un valore dato una chiave specificata, non di fungere da contenitore sequenziale. Solo perché altre strutture dati sono sequenziali ma i dizionari non lo sono non significa che i benefici delle sequenze siano invalidati.

Le sequenze sono una delle tre strutture logiche fondamentali nel calcolo. Ogni problema di calcolo (risolvibile) può essere risolto con tre strumenti: sequenze, cicli e decisioni.

Le sequenze preservano la relazione tra gli elementi; cioè, il primo elemento deve comparire prima del secondo elemento, che deve verificarsi prima del terzo elemento, e così via. Ciò significa che possiamo recuperare l'elemento successivo in una sequenza e assicurarci che abbiamo recuperato l'elemento nell'ordine corretto, relativamente agli altri elementi. Ciò ha ovviamente benefici utili: le parole consistono sempre nella stessa sequenza di lettere ogni volta che vengono lette e i metodi consistono nella stessa sequenza di istruzioni ogni volta che vengono chiamati.

È possibile creare sequenze pigre. È possibile creare una classe che implementa una macchina a stati e restituisce un elemento dalla macchina a stati ogni volta che viene chiamato un metodo. Puoi memorizzare le sequenze nella cache.

Le sequenze possono essere create da liste collegate, alberi e altre strutture dati. Ogni struttura di dati ha le sue qualità specifiche; una lista collegata singolarmente può essere attraversata in modo efficiente in una direzione, ma non nell'altra. Alcune strutture dati, come gli alberi binari, ti daranno accesso sequenziale e anche un accesso casuale efficiente. Alcune strutture di dati, come gli elenchi con collegamento doppio, consentono di attraversare in modo efficiente la sequenza all'indietro.

Se si scrive la struttura dei dati per conformarsi a un'interfaccia sequenziale, è possibile disattivare l'implementazione della sequenza in base alla struttura dei dati più appropriata per i requisiti specificati. Puoi quindi scrivere il tuo codice su quell'interfaccia e assicurarti che le implementazioni sottostanti sono modulari.

Non ne so molto delle sequenze in python, ma la struttura dei dati fondamentali in Scheme (usata nel SICP originale) è un list, e i modi in cui è possibile comporre tali elenchi ( che sono essenzialmente sequenze), e la flessibilità e il potere che offre, dovrebbero essere ovvi. Ogni lingua contenente sequenze consente tali composizioni.

    
risposta data 25.05.2015 - 17:10
fonte

Leggi altre domande sui tag