2011-12-29 12 views
8

Sto esaminando il libro Natural Language Processing for Working Programmers. Il libro usa Haskell, di cui non ho molta esperienza. Il seguente codice genera un errore in GHCIHaskell: "L'ultima istruzione in un costrutto 'do' deve essere un'espressione"

:{ 
do 
    l <- [0..9] 
    ps <- (\x -> [x-1, x+2]) l 
    return ps 
:} 

Questo è il messaggio di errore restituito

The last statement in a 'do' construct must be an expression

Tutte le risposte che ho incontrato sembrano suggerire è un errore indentazione, ma per quanto riguarda Posso dire che la rientranza sembra corretta. Qualche idea su quale potrebbe essere il problema?

+0

Quale versione di ghci stai usando? Su Windows/OSX/Ubuntu/Fedora/...? – dave4420

+0

6.12.1 su Ubuntu 10.04. Potrebbe essere questo il problema? –

risposta

4

ho digitato il codice in ghci 7.0.3 e non ho avuto un errore.

Prelude> :{ 
Prelude| do 
Prelude| l <- [0..9] 
Prelude| ps <- (\x -> [x-1, x+2]) l 
Prelude| return ps 
Prelude| :} 
[-1,2,0,3,1,4,2,5,3,6,4,7,5,8,6,9,7,10,8,11] 

Edit: Quando uso ghci 6.12.1 confezionato in Ubuntu 10.04, ottengo lo stesso errore, come si.

+0

Ho il sospetto che possa avere una versione troppo vecchia. L'ho preso dai repository piuttosto che dal sito Web di haskell. 6.12.1 su Ubuntu 10.04. Grazie. –

+0

Sì, sembra il problema. – dave4420

0

I simboli di :{ e :} non fanno parte di Haskell, penso che sia qualcosa a che fare con il testo che stai leggendo. Inoltre, il codice che hai postato ha una lambda usata come lista monad. Prova questo:

do 
    l <- [0..9] 
    ps <- (\x -> [x-1, x+2]) l 
    return ps 
+1

Ero sotto l'impressione che ': {' e ':}' erano necessari per il codice multilinea in GHCi. Lasciato fuori l'argomento dell'elenco per errore, mi dispiace. Però non ho ancora capito la monade. Dovrei usare il tuo codice come è in GHCi? Ogni riga viene interpretata in modo indipendente. –

+0

Penso di aver trovato una via d'uscita, basata su http://stackoverflow.com/a/3532505/420386. Usare i semi-colon sembra risolvere il problema, anche se mi fa sentire un po 'sporco :) Grazie. –

+1

': {' e ':}' sono necessari per il codice multilinea in ghci, sì. – dave4420

Problemi correlati