2011-12-29 8 views
8

私は書籍Natural Language Processing for Working Programmersを使っています。この本はハスケルを使っていますが、これはあまり経験がありません。以下のコードは、これはそれがインデントエラーであることを示唆しているように見えるのエラーメッセージが Haskell: "do"構造の最後のステートメントは式でなければなりません "

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

私が遭遇してきたすべての答え

を返されたが、限り

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

GHCiの中にエラーがスローされますインデントが正しいように見えます。どのような問題が起こる可能性がありますか?

+0

ghciのどのバージョンをお使いですか? Windows/OSX/Ubuntu/Fedora/...では? – dave4420

+0

6.12.1、Ubuntu 10.04。それが問題になるかもしれませんか? –

答えて

4

ghci 7.0.3にコードをタイプしましたが、エラーは発生しませんでした。

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] 

編集:のUbuntu 10.04にパッケージとして、私はGHCiの6.12.1を使用する場合、私はあなたと同じエラーを取得します。

+0

私はバージョンが古すぎると思われます。私はhaskellのウェブサイトではなく、reposから入手しました。 Ubuntu 10.04で6.12.1。ありがとう。 –

+0

はい、問題のようです。 – dave4420

0

:{:}のシンボルは、ハスケルの一部ではありません。あなたが読んでいるテキストとは関係があります。また、あなたが投稿したコードは、リストのモナドとして使われているラムダを持っています。試してみてください:

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

私はGHCiの複数行のコードには ':{'と ':}'が必要だという印象を受けました。誤ってリストの引数を残して、申し訳ありません。私はモナドの周りに頭を包んでいません。 GHCiのようにあなたのコードを使用するはずですか?各行は独立して解釈されています。 –

+0

私は、http://stackoverflow.com/a/3532505/420386に基づいて、方法を見つけた可能性があります。セミコロンを使用すると、問題が解決するようですが、少し気になります:)ありがとう。 –

+1

':{'と ':}'はghci、yesの複数行のコードに必要です。 – dave4420

関連する問題