goodgest
goodgest

Reputation: 418

Netlogo How to avoid NOBODY Runtime error?

How can I avoid NOBODY Runtime error? The following is sample code. This is a code that can be used for zero division error avoidance. Therefore, I know that it can not be used to avoid NOBODY error. But I can not find any other way. The following is a Runtime error message-> "IFELSE-VALUE expected input to be a TRUE / FALSE but got NOBODY instead." I appreciate your advice.

  set top ifelse-value (nobody)
  [ 0 ][ top ]
  set ts turtles with [speed = 0 and not right-end] 
  set top max-one-of turtles [who]
  set topx [xcor] of top ; A NOBODY error appears in "of" of this code
  set L count ts with [xcor > topx]

Upvotes: 1

Views: 526

Answers (1)

Luke C
Luke C

Reputation: 10291

The input of ifelse-value needs to be a reporter the returns either true or false (full details here. So, if you use nobody as the input, Netlogo does not evaluate whether or not the input is nobody or not, it just reads nobody- in other words your input is not returning either true or false.

For input, then, you need to instead use a boolean variable (one that is either true or false), a to-report that returns true or false, an expression that Netlogo can evaluate, etc. Consider the following examples:

to go

  let x true
  set top ifelse-value ( x ) 
  ["x is true"] 
  ["x is NOT true"]
  print ( word "Example 1:  " top )

  set top ifelse-value ( this-is-true ) 
  ["Reporter returned true"] 
  ["Reporter did not return true"]
  print ( word "Example 2:  " top )

  set x nobody
  set top ifelse-value ( x = nobody ) 
  ["x IS nobody"] 
  ["Is NOT nobody"]
  print ( word "Example 3:  " top )

  set x 0
  set top ifelse-value ( x = nobody ) 
  ["x IS nobody"] 
  ["x Is NOT nobody"]
  print ( word "Example 4:  " top )

  set top ifelse-value ( nobody = nobody ) 
  ["nobody = nobody"] 
  ["nobody != nobody"]
  print ( word "Example 5:  " top )

end

to-report this-is-true
  report true
end

Upvotes: 1

Related Questions