How could this code enter an infinite loop? aka how to implement a counter in Haskell? -


i have code inside function side effects ... -> io()

let index_player = (-1) dronepositionbyplayer <- replicatem nb_players $      let index_player = index_player + 1      dronepositions <- replicatem nb_drones $         input_line <- getline         let input = words input_line          let dx = read (input!!0) :: int          let dy = read (input!!1) :: int         let droneposition = droneposition (position dx dy) index_player         hputstrln stderr $ "position = " ++ show droneposition         return (droneposition)     return (dronepositions) 

when execute it, while parsing input data (which several lines containing each x , y position) have trace on stardard error output:

position = droneposition (position 703 892) answer: <<loop>>  

obviously can read first position, goes in infinite-loop, trying display field index_player.

droneposition , position simple algebraic datatypes:

data position = position int int deriving show data droneposition = droneposition position drone deriving show 

what ill-formed in code ?

let index_player = index_player + 1 

the above recursive definition, resulting in index_player variable computed adding 1 recursively -- forever. not terminate. not refer previous variable of same name declared few lines above.

if want loop, can adapt e.g.

xs <- form [0..100] $ \i ->    print    return (1000 + i) 

the above prints numbers 0 100, , defines xs list of returned numbers, i.e. [1000..1100]. remember import control.monad use form.


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -