1

2 つの関数を提供する次のデータ型を定義しました。

data Problem = Prob { result :: State -> Action -> State
                    , stepCost :: State -> Action -> Integer
                    }

この型をインスタンス化するにはどうすればよいですか? 私はこれを試しました:

let mcp = Prob { result _ _ = (False, (1,1)), stepCost _ _ = 1 } in True

しかし、私は得る: ERROR - 式の構文エラー (予期しない `_')

メンバーが1つの引数しかとらないことを除いて、同様のデータ型をインスタンス化することができました:

data Lala = La  { omg :: State
                , gee :: Integer
                }

let mcp = La { omg = (False, (1,1)), gee = 1 } in True

True を返します。

しかし重要なのは、特定の結果とステップコスト関数を使用してデータ型問題をインスタンス化したいということです。もちろん、これらの関数は引数に依存します。では、どうすればそれらにいくつかの引数を渡すことができますか?

4

2 に答える 2

4

たとえば、そのためにはラムダ式が必要です。

let mcp = Prob { result =\ _ _ -> (False, (1,1)), stepCost =\ _ _ -> 1 } in True
于 2012-04-20T21:56:58.167 に答える
4

ラムダ式でインスタンス化する必要があります。パラメータを直接取る名前として扱うことはできません。

let mcp = Prob { result = \_ _ -> (False, (1,1)), stepCost = \_ _ -> 1 } in True
于 2012-04-20T21:57:16.047 に答える