1

我定义了以下数据类型,它应提供 2 个功能:

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

如何实例化这种类型?我试过这个:

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

但是我得到:错误 - 表达式中的语法错误(意外的`_')

我设法实例化了一个类似的数据类型,但它的成员只接受 1 个参数:

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

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

返回真。

但关键是我想用其特定的结果和 stepcost 函数来实例化数据类型 Problem 。当然,这些函数取决于它们的参数。那么我怎样才能向他们传递一些论点呢?

4

2 回答 2

4

你需要例如 lambda 表达式,

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

您需要使用 lambda 表达式对其进行实例化;您不能将其视为直接带参数的名称。

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