2016-07-06 3 views
3

「where」と「let .. int」文の違いはほとんどありません。 ここに私のコードです。私は2通りの方法が5IOでlet .. in文が動作しないのですか?

main = do 
    print x 
     where x = 5 
    let x = 5 in print x 

第1の動作印刷したいが、私は「『せ』の入力でエラーを解析し、」取得 これはインデントの問題であり、または私のコードは単純に間違っているのですか?

答えて

4

whereは常に文を終了します。 whereの後には何もしないでください。 だから、あなたはこのようにそれを書くことができます:where句は、それが属する文を終了し、これが有効である

main = do 
    let x = 5 in print x 
    print x 
     where x = 5 

。パーサーはwhere x = 5の後に何も見つからないと予想していたので、あなたのコードは無効でしたが、let節が見つかりました。

+1

声明とは何ですか?とにかく、 "どこで'が不正確なのかは分からない。例えば、{()=()}}の 'do {case(){() - > return(); return()} 'は完全に有効です。Haskell(明快にするために完全にブレースされたセミコロン)。 –

3

コードが間違っています。 where句は、定義の最後になければなりません。letは、式が有効な場所であればどこでも発生する可能性のある式です。

関連する問題