2017-11-19 29 views
2

私はハスケルに関して質問を受けました。リスト内で半分の偶数に関数を作り、偶数だけの最終リストを返しました要素の残りの部分を修正した(半分にした)。Haskellエラー "入力時に解析エラーが発生しました"

私のコードをコンパイルしようとすると、「エラー:入力時にエラーが解析された」というエラーが表示され、その解決策が見つからなかった。

halfEvens :: [ Int ] -> [ Int ] 
halfEvens xs = [x|x<-xs] 
       if x mod 2 == 0 
       the x = x/2 
       else 
       x = x 
+0

申し訳ありませんが、私のコードはちょっと混乱しています。だから私の機能を自分の望むものとして機能させるためにはどうしたらよいですか?何かお勧めしますか? – Wandy

答えて

2

できるだけ/あなたの元のコードの多くの意図を維持、

halfEvens xs = [x | x <- xs, x <- [ -- instead of x = ... 
       if x `mod` 2 == 0 
        then {- x = -} x `div` 2 
        else {- x = -} x ]] 

その種類はhalfEvens :: Integral t => [t] -> [t]と推測されます。

面白いことに、同じ変数名をx <- [...]構文で使用することが許可されています。それはちょうど影になる。とにかく我々は新しい価値にしか関心がないのでOKです。そうすれば、私たちは精神的に変数 "更新"として扱いますが、もちろんHaskellには更新変数はありません。

4

あなたのコードでは、複数の問題があります。

  • [x|x<-xs]は何も有効ではありません。これはちょうどxsと評価されます。
  • 埋め込み演算子としてmodを使用している場合、その周囲にバッククォートが必要です
  • 変数を再割り当てすることはできません。 then x = x/2およびx = xは、Haskellでは違法です。

主な問題は、しかし、あなただけの種類のその下に浮いif式で、空のリスト内包([x|x<-xs])を持っているという事実です。あなたの意図は、理解の中にifを入れることだったと思います。何かのように:

halfEvens :: [Int] -> [Int] 
halfEvens xs = [if x `mod` 2 == 0 then x `quot` 2 else x | x <- xs] 

変更:

  • を私は何を再割り当てするつもりはありませんよ。各要素は、バーの残りの部分(|)に評価されます。
  • /は整数では使用できません。 Use quot or div for integer division.

main = do 
    putStrLn . show $ halfEvens [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 

[1,1,3,2,5,3,7,4,9,0] 

あなたのコードは、しかしハスケルのいくつかの深刻な誤解を示しています。私は良い本で座り、すべての例を試してみることをお勧めします。ハスケルは簡単な言葉ではありません。それを駆け抜けようとしないでください。

3

したがって、偶数を半分にする機能を適用したいが、奇数だけを残しておきたい。私たちは、前奏からevenを使用して、これは単一Intに変換を実行するための関数を書くことができます。

halfEven :: Int -> Int 
halfEven x | even x = x `div` 2 
      | otherwise = x 

今、私たちはIntのリスト上でこの機能をmapことができます。

halfEvens :: [Int] -> [Int] 
halfEvens xs = map halfEven xs 

またはポイントを無料に行きます:

halfEvens = map halfEven 

やリストの内包表記を使用します。

halfEvens xs = [halfEven x | x <- xs] 
+0

マップは何をしましたか? 'halfEven'を 'halfEvens'にインポートしていますか?または、他の言葉で 'halfEven'の値を 'halfEvens'に割り当てることはできますか? – Wandy

+0

@Wandy 'map halfEven == \ xs - > [halfEven x | x < - xs] 'である。 – chepner

関連する問題