我试图创建一个“类似代理”的对象,即给定两个索引(代理索引,备用索引)返回该备选的首选项。方法不可见
我的错误是:
Couldn't match expected type `Integer'
with actual type `RandomAgent'
In the first argument of `preference', namely `agentNum'
In the expression: preference agentNum alternative
In an equation for `score':
score agentNum alternative = preference agentNum alternative
我想有是一段代码,基本上代表了一个数学函数如A_i(x_j)
其中A_i
是替代x_j
代理的“分数”的功能。
我将不胜感激关于如何进行的任何提示。也许还有一个更简单的方法...
全部下面代码的其它功能
module AgentGenerator where
import System.Random
type Alternative = Integer
data RandomAgent = RandomAgent
class Agent a where
score :: a -> Alternative -> Double
instance Agent RandomAgent where
score agentNum alternative = preference agentNum alternative
-- TODO: Replace Doubles with Agents
-- Generate `n` agents with `x` alternatives each
generate :: Integer -> Integer -> [Double]
generate agents alternatives = [ preference i j | i <- [0..(agents-1)], j <- [0..(alternatives-1)] ]
-- Given agent's index and alternative's index return that agent's
-- preference for that alternative
preference :: Integer -> Integer -> Double
preference agent alternative = randomFromSeed $ fromCoord (agent, alternative)
-- Given grid position convert it to a single integer
fromCoord :: (Integer, Integer) -> Integer
fromCoord (agent, alternative) = (agent * 10^0) + (alternative * 10^1)
-- Generate random value between [0, 1] based on the seed
randomFromSeed :: Integer -> Double
randomFromSeed seed = value
where (value, gen) = randomR (0.0, 1.0) $ mkStdGen (fromIntegral seed)
你确定你没有输错'scope'而不是'score'吗? – mipadi 2012-02-09 22:21:38
是的!在我的帖子中输入错字。谢谢。 – drozzy 2012-02-09 22:22:25
RandomAgent类未在您显示的代码中的任何位置定义。这是另一个错字或你的实际错误(试图实例化错误的类)? – sepp2k 2012-02-09 22:26:59