Holger Siegel wrote:
loop alpha b (c:cs)
= let alpha' = max(alpha, - negascout c d (-b) (-alpha))
in if alpha' >= beta
then alpha'
else if alpha' >= b
then let alpha'' = - negascout c d (-beta) (-alpha')
in if alpha'' >= beta
then alpha''
else loop alpha'' (alpha'' + 1) cs
else loop alpha' (alpha' + 1) cs
loop alpha _ [] = alpha
Guard-izing and where-izing that for more clarity:
> loop alpha _ [] = alpha
> loop alpha b (c:cs) = result
> where
> alpha' = max(alpha, - negascout c d (-b) (-alpha))
> result
> | alpha' >= beta = alpha'
> | alpha' >= b = result'
> | otherwise = loop alpha' (alpha' + 1) cs
> where
> result'
> | alpha'' >= beta = alpha''
> | otherwise = loop alpha'' (alpha'' + 1) cs
> where
> alpha'' = - negascout c d (-beta) (-alpha')
Which makes it obvious that the "result" function is something inlined
into itself. Uninlining may make the code clearer still, or maybe not.
--
Live well,
~wren
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe