Al toplevel di OCaml (versione 3.11.2), questa semplice espressione mi sta dando un errore:ocaml null keyword: una volta ma non di più?
# let a = [] in if null a then 0 else 1;;
Error: Unbound value null
Ho appena iniziato l'apprendimento ocaml dal oreilly book, che sembra utilizzare null come parola chiave di frequente - per parte superiore della pagina 32:
# let rec size a_list =
if null a_list then 0
else 1 + (size (List.tl a_list));;
Sono imbarazzato per fare una domanda così chiaramente googleable qui. Ma dopo molti googling sono arrivato a mani vuote. Quindi sono aperto a suggerimenti di query su google come lo sono per risposte semplici. (tentativi google falliti: [ocaml "Errore: valore non associato null"] [parola chiave ocaml null] [ocaml changelog null] [ocaml change null]).
Domanda: era null una volta una parola chiave ocaml, ma non più? O ho installato ocaml errato o misspell qualcosa?
Posso ovviamente sostituire ogni occorrenza di "null" con "[]" nel codice, ma sono sorpreso che una copia letterale del codice di un libro mi dà un errore così presto. Questo libro è pieno di altri trucchi? Credo che sia stato scritto con ocaml 2.04 in mente; è troppo vecchio? L'ho scelto perché mi piaceva il TOC e la disponibilità gratuita online. A parte questo errore nullo (che sono ancora più pronto a incolpare me stesso che sugli autori), le spiegazioni sono belle e non vedo l'ora di discutere sulla miscelazione funzionale dello stile imperativo & (che per me è in espansione, come qualcuno solo familiare con c/C++).
[Questa domanda] (http://stackoverflow.com/questions/4013654/differences-between-ocaml-2-and-3) affronta cambiamenti tra la versione 2 e 3, e link a un changelog; nessuno di questi menziona la cosa nulla. In effetti il libro che ho linkato nella mia Q è menzionato dall'OP e raccomandato da qualcuno che risponde alla domanda. Probabilmente commenterò su quel thread dopo aver capito cosa sta succedendo qui. – ImAlsoGreg
Non ero a conoscenza del fatto che 'null' era sempre una parola chiave. Sei sicuro che non sia solo una funzione che hanno definito ad un certo punto? AFAIK, non esiste tale nozione di 'null' in un vero linguaggio funzionale. Probabilmente la cosa più vicina sarebbe l'unità ('()'). –
Hai ragione! Ho cercato il mio pdf per "let null =" e sicuramente, è qualcosa definito nel libro. Grazie mille per averlo chiarito. Ora la meta-domanda è - la domanda dovrebbe essere lasciata sul posto per le persone che fanno lo stesso stupido errore come me più tardi? – ImAlsoGreg