2009-08-13 13 views
0

に失敗する原因となったコードが見えている VI中: 見えないインデントのエラーは、ここでは、負荷が私はトリッキーなインデントによって引き起こされる問題に会ったGHCiの

1 import Data.List 
    2 myQuickSort [] = [] 
    3 myQuickSort (x:xs) = myQuickSort smaller ++ [x] ++ myQuickSort bigger 
    4  where smaller = filter (< x) xs 
    5    bigger = filter (>=x) xs 

しかし./catの3.hs後

、それ

[email protected]:/opt/playGround/haskell# cat 3.hs 
import Data.List 
myQuickSort [] = [] 
myQuickSort (x:xs) = myQuickSort smaller ++ [x] ++ myQuickSort bigger 
    where smaller = filter (< x) xs 
        bigger = filter (>=x) xs 

そして、GHCiの中でそれをロードし、見え

GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help 
Loading package base ... linking ... done. 
Prelude> :l 3.hs 
[1 of 1] Compiling Main    (3.hs, interpreted) 

3.hs:5:11: parse error on input `=' 
Failed, modules loaded: none. 
Prelude> 

どのようにすべき私はhaskellをプログラミングするときにこの目に見えないインデントエラーをキャッチしますか?

編集: このように記述すると、エラーになります。どこの場所に変数を置くのが良いか?

myQuickSort [] = [] 
    myQuickSort (x:xs) = myQuickSort smaller ++ [x] ++ myQuickSort bigger 
     where 
     smaller = filter (<x) xs 
     bigger = filter (>=x) xs 

答えて

3

あなたの問題はタブの拡張と関係があります。ハスケルは、タブが8スペースの価値があると仮定します。あなたのエディタは異なる仮定を持っている可能性があります。検索して、すべてのタブをエディタで8つのスペースに置き換えてから、スペースを調整してwhere句を整列させます。

+3

または、Vimで ':set et'と':retab'でタブを現在の設定でスペースに展開し、 ':set ts = 8'でタブが将来8スペースになるようにします。 – ephemient

0

qs.hs:

import Data.List 
myQuickSort [] = [] 
myQuickSort (x:xs) = myQuickSort smaller ++ [x] ++ myQuickSort bigger 
     where smaller = filter (< x) xs 
      bigger = filter (>=x) xs 

GHCiの:

 
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help 
Loading package base ... linking ... done. 
Prelude> :l qs.hs 
[1 of 1] Compiling Main    (qs.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> myQuickSort [9,8,7,6] 
[6,7,8,9] 

あなたがGHCiのどのバージョンを使用していますか?

あなたのプログラムは5行だけですが、エラーは61行目です。さらに、それは14列目にあり、14列目にはあなたが与えた5行に=がありません。

プログラムは、whereが独自の行にある場合、または上の行にある場合など、私のためにうまくロードされます。

+0

Mark、全プログラムを貼り付けていないので、エラー番号がソースコードと一致しません。私の本当の問題はインデントのエラーだとわかりました。私は私の質問を書き直しました。 – pierrotlefou

6

おそらくタブの問題です。タブは特定の数のスペースと同じに見えるかもしれませんが、Haskellは同じものだとは思わないでしょう

関連する問題