【发布时间】:2015-05-19 04:49:00
【问题描述】:
我正在尝试编写一个不断接收整数值并输出迄今为止给出的最大值的函数。
这看起来很简单
max a b = maximum [a,b]
但函数应该“记住”过去赋予它的值,并将新值与新值进行比较。
例如:我要开始的初始值是-500。如果我用5 的参数调用我的函数,那么它应该返回5,因为5 大于-500。
如果我再次调用该函数,这次使用3 的参数,它仍应返回5,因为即使3 大于-500,它也小于5。
这甚至可以通过无副作用的编程实现吗?
【问题讨论】:
-
无副作用编程有没有可能产生副作用? … 不。 wiki.haskell.org/State_Monad 可能会有所帮助。
-
但是有没有办法做到这一点,而不会产生副作用
-
对于初学者的合理答案只能是:不,没有 - 而是将你记住的东西作为你的函数的参数现在(state-monad 只是让它隐含) - btw 为什么你想要类似的东西,当你可以使用(在你的例子中)只是
maximum和查找最大值的所有事物的列表。代替元素? -
嗯,我正在尝试 alpha-beta 修剪,所以我需要一个函数来不断限制 alpha 和 beta 边界。从 (-500, 500) 开始
-
这真的没问题 - 只需传递你的 alpha/beta 值(并明显返回更新的版本) - 它甚至会让你更好地理解算法! - 当然,在这种情况下它可能会变得乏味,并且 state-monad 可能毕竟不是一个坏主意 - 但我只会在你已经理解这些东西的情况下推荐它 - 如果现在不坚持明确的参数/返回跨度>
标签: haskell