2010-12-03 20 views
0

今日は質問を投稿しましたが、誰かが助けてくれましたが、彼のコードは機能していません。これは私が彼のコードを実行すると、私はエラーを取得ポストlink to the post少しのバグを修正するための助けが必要

へのリンクです:「 `入力にエラーを解析」」

ザ・"。 " "\ t"がエラーを引き起こした後。ハスケルで新しいですので、なぜそれが原因でエラーが発生しているのか分かりません。

これを解決するにはヘルプが必要です。

おかげ

UPDATE

私はコードを読み込むとき、私はエラーを取得します。これはエラーです:

Couldn't match expected type `a -> Bool' 
      against inferred type `[Bool]' 
    In the first argument of `any', namely 
     `(map (\ t -> contains t b) c)' 
    In the second argument of `(||)', namely 
     `any (map (\ t -> contains t b) c)' 
    In the expression: a == b || any (map (\ t -> contains t b) c) 

はそれを修正する際に助けが必要です。

おかげ

UPDATE

私は変更を行った後にコードを実行する場合:

data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show) 

contains :: Tree a -> a -> Bool 
contains (Leaf a) b = a == b 
contains (Branch a c) b = a == b or (map (\ t -> contains t b) c) 

を、これは私が今取得エラーです:

Occurs check: cannot construct the infinite type: 
     a = ([Bool] -> Bool) -> [Bool] -> a 
    When generalising the type(s) for `contains' 

UPDATE 3

これは私のコードですが、すべての変更を行ってもまだエラーが表示されます。私は理解していません:

data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show) 

contains :: Eq a => Tree a -> a -> Bool 
contains (Leaf a) b = a == b 
contains (Branch a c) b = a == b || (map (\t -> contains t b) c) 

ブールは私のシステムでは動作しませんので、ブールを使用する必要があります。今これは私が得るエラーです:

Couldn't match expected type `Bool' against inferred type `[Bool]' 
    In the second argument of `(||)', namely 
     `(map (\ t -> contains t b) c)' 
    In the expression: a == b || (map (\ t -> contains t b) c) 
    In the definition of `contains': 
     contains (Branch a c) b = a == b || (map (\ t -> contains t b) c) 

上記のコードを実行してもよろしいですか?あるいは、どこかで何かを逃しているかもしれません。 お時間をいただき、ありがとうございます。それは有り難いです。

おかげ

+0

これはtypですが、methinks( '\ t。(...)'は無効です。Haskell、 '\ t - >(...)'は - 省略記号を有効なものに置き換えます。コース)、彼はすでにそれを修正しました。 – delnan

答えて

2

Haskellで、その本体からラムダの引数リストを分離するための構文は、ラムダ計算のよう->、ない.です。

Btw:これはリンク先のポストで既に修正されています。

編集:彼はまたanyの使用法を持っています - 彼はそれをorのように扱っています。これは、型シグネチャは、(Boolean代わりにBoolEq制約が欠落)間違っているこれに加え

or (map (\ t -> contains t b) c) 

又は

any (\t -> contains t b) c 

いずれかであることが必要です。だから、それを削除するかのように変更し、次のいずれか

contains :: Eq a => Tree a -> a -> Bool 
+0

ご返信ありがとうございます。私もそれを修正したが、その後、私はコードを実行すると、新しいエラーが発生します。私は上記の私のポストにこの新しいエラーを含めました。タイプと関係があります。それを修正するために必要があります。 – kap

+0

変更を行った後にもう一度エラーが表示されたら、投稿を更新しました – kap

+0

@kap:はい、タイプsigも間違っていました。今回私は実際にコンパイルしようとしましたが、現在は動作しています。 – sepp2k

0

驚くべきことに、あなたが得るエラーが間違っている正確に何を説明します:あなたは||の右側にBoolのリストを取得します。したがって、mapの結果リストをさらに処理する必要があります。 andまたはor(おそらく後者のもの)を適用してください。

関連する問題