Domanda

Sto seguendo un tutorial. (Real World Haskell)

E ho una domanda per principianti su testa e la coda ha invitato liste vuote:. In GHCi si restituisce eccezione

Intuitivamente penso direi che entrambi dovrebbero restituire un elenco vuoto. Mi può correggere? Perchè no ? (Per quanto mi ricordo in OzML a sinistra oa destra di una lista vuota ritorna nil)

I sicuramente non ancora trattato questo argomento nel tutorial, ma isnt una fonte di bug (se fornisce alcun argomento)? Voglio dire, se mai passare ad una funzione un elenco di argomenti che possono essere Optionnal, leggendole con la testa può portare a un bug?

So solo che il comportamento GHCi, non so cosa succede quando compilato.

È stato utile?

Soluzione

  

Intuitivamente penso che sarebbe dire che entrambi dovrebbero restituire un elenco vuoto. Mi può correggere? Perché no?

Bene - head è [a] -> a. Restituisce il singolo, primo elemento; nessuna lista.

E quando non c'è primo elemento come in una lista vuota? Beh che per tornare? Non è possibile creare un valore di tipo a dal nulla, quindi tutto ciò che rimane è undefined - un errore.


E tail? Coda in fondo è una lista senza il suo primo elemento - cioè elemento di altezza inferiore a quella originale. Non si può sostenere questi leggi quando non c'è primo elemento.

Quando si prende una mela da una scatola, non si può avere la stessa scatola (cosa è successo quando tail [] == []). Il comportamento deve essere undefined troppo.


Questo porta alla seguente conclusione:

  

I sicuramente non ancora trattato questo argomento nel tutorial, ma isnt una fonte di bug? Voglio dire, se mai passare ad una funzione un elenco di argomenti che possono essere Optionnal, leggendole con la testa può portare a un bug?

Sì, è una fonte di bug, ma perché permette di scrivere codice difettoso. Il codice che fondamentalmente cercando di leggere un valore che non esiste. Quindi:. * Non utilizzare mai la testa / coda ** - Utilizzare il pattern matching

sum     [] = 0
sum (x:xs) = x + sum xs

Il compilatore può garanzia che tutti i casi possibili sono coperti, i valori sono sempre definito ed è molto più pulito da leggere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top