-4

このコードに問題があります:

module Blueprint where

data Colour = Blue | Green | Red 
  deriving ( Eq, Show )

data Car = Car { wheels :: Integer
               , colour :: Colour
               }
  deriving ( Eq, Show )

data Property = Colour_Is Colour
              | Wheels Ordering Integer
              | And Property Property
              | Not Property
              | Or Property Property 
  deriving Show 

check :: Property -> Car -> Bool
check prop car = case prop of
    Colour_Is col -> col == colour car
    Wheels ord num -> case ord of 
                            LT -> num > wheels car
                            EQ -> num == wheels car
    And l r -> check l car && check r car
    Not p -> not check p car
    Or x y -> check x car || check y car 


cars = [ Car { wheels = 4, colour = Red }
        , Car { wheels = 2, colour = Blue }
        , Car { wheels = 14, colour = Green }
        , Car { wheels = 4, colour = Green }
        , Car { wheels = 2, colour = Red }
        ]

prop1 :: Property
prop1 =  And (Wheels EQ 14) (Colour_Is Green)

test :: Bool
test = and
    [ check ( Wheels EQ 4 ) ( cars !! 0 )
    , check ( Wheels LT 3 ) ( cars !! 1 )
    , check ( And ( Wheels EQ 14 ) ( Colour_Is Green )) ( cars !! 2 )
    , check ( Not ( Colour_Is Red ) ) ( cars !! 3 )
    , filter ( check prop1 ) cars == take 3 cars
    ]

チェック関数を作成し、Colour_Is、And、Not および Wheels を正しく実装しましたが、Or 関数を追加すると、次のようになります。

( Or x y -> check x car || check y car )

ghci からこのエラーが発生しています:

D:\My_data\hs\strategy.hs:26:16: 入力 `->' の解析エラー 失敗しました。モジュールがロードされました: なし。

私はHaskellが初めてです。私の間違いはどこですか?

4

1 に答える 1

3

解析エラーはおそらくインデントが正しくないことが原因ですが、Dhaivat が質問を再フォーマットした場合、そのエラーは存在しません。

さらに、引数の周りに括弧が必要でしたnot:

  Not p -> not check p car
-->
  Not p -> not (check p car)

質問を適切にフォーマットすることに加えて、次回は賢明なタイトルを選んでください。「Haskell が動作しない」というタイトルは、a) 間違っている、b) 情報がない、c) Haskell が好きな人からの回答を得にくい。言語に個人的な投資をしている人々 (言語仕様とコア ライブラリに取り組んできた人々) が実際には言語のソーシャル シーンの一部である可能性があるほど、まだ十分に小さいコミュニティです。

于 2011-05-22T00:46:24.117 に答える