Sono veramente nuovo a Haskell (In realtà ho visto "Real World Haskell" da O'Reilly e ho pensato "Hmm, penso che imparerò programmazione funzionale" ieri) e mi chiedo: io è possibile utilizzare l'operatore costrutto per aggiungere un elemento all'inizio di una lista:Haskell Contro Operator (:)
1 : [2,3]
[1,2,3]
ho provato a fare un esempio tipo di dati che ho trovato nel libro e poi giocare con esso:
--in a file
data BillingInfo = CreditCard Int String String
| CashOnDelivery
| Invoice Int
deriving (Show)
--in ghci
$ let order_list = [Invoice 2345]
$ order_list
[Invoice 2345]
$ let order_list = CashOnDelivery : order_list
$ order_list
[CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, CashOnDelivery, ...-
etc. .. si ripete per sempre, è questo perché usa la valutazione pigro?
- EDIT -
va bene, quindi viene martellato in testa che lascia order_list = CashOnDelivery: order_list non aggiunge CashOnDelivery al order_list originale e quindi impostare il risultato di order_list, ma invece è ricorsivo e crea una lista infinita, aggiungendo per sempre CashOnDelivery all'inizio di se stesso. Naturalmente ora ricordo che Haskell è un linguaggio funzionale e non posso cambiare il valore dell'originale order_list, quindi cosa dovrei fare per un semplice "tack alla fine (o all'inizio, qualunque cosa) di questa lista?" Crea una funzione che accetta un elenco e BillingInfo come argomenti, quindi restituisce un elenco?
- EDIT 2-
bene, sulla base di tutte le risposte che sto ricevendo e la mancanza di essere in grado di passare un oggetto per riferimento e mutare le variabili (come sono abituato a) ... Penso di aver appena fatto questa domanda in modo prematuro e che ho davvero bisogno di approfondire ulteriormente il paradigma funzionale prima che possa aspettarmi di capire davvero le risposte alle mie domande ... Immagino che quello che stavo cercando fosse come scrivere una funzione o qualcosa, prendere una lista e un oggetto e restituire una lista con lo stesso nome in modo che la funzione possa essere chiamata più di una volta, senza cambiare il nome ogni volta (come se fosse in realtà un programma che aggiungerebbe ordina a una lista ordini e l'utente non dovrebbe pensare di un nuovo nome per la lista ogni volta, ma piuttosto aggiungere un elemento alla stessa lista).
Si creerà sempre un nuovo elenco. Perché vorresti usare il vecchio nome per fare riferimento a una nuova lista? – ephemient
Prima di poter capire la risposta, devi prima capire la tua domanda. –
lol, che profondità: P –