Can any one explain a few lines of code to me?

Hello there !
I am pretty sure that this kind of question is not very welcomed in here, but I have no choice other than posting my question here.

I know that defining functions in Mathematica is like f[x_] := x, but I have came across a function definition that I cant figure out its functionallity the function is like below:

update2[0,0,p_] := if[RandomReal[] <= p, {1,1, p}, {3,0,p}];
update2[0,_,p_] := {5,0,0};
update2[1,0,p_] := {2,1,0};
update2[1,b_,p_] := {0,0, p*(1/2)};
update2[2,_,_] := {2,0,0};
update2[3,0,p_] := {0,0,Min[p * 2, 1/2]};
update2[3,b_,p_] := {0,0,p*(1/2)};
update2[5,_,_] := {5,0,0}

this function is called on elements of three arrays like s,b, p that are of length n

It would be very great If anyone could explain what this function is doing.

It’s using pattern matching to handle general and specific cases of the arguments. The specific cases take precedence. For example:

In[6]:= f[x_, _] := x^2

In[7]:= f[x_, 3] := x^3

In[8]:= f[2, 5]

Out[8]= 4

In[9]:= f[2, 3]

Out[9]= 8

It may have only been a typo, but be sure to change the

if

to

If

I have another question regarding the function Count , Inside a code that I am reviewing I see the function Count is called like this, but I am getting an error that I am giving it too many arguments.

Capture.PNG

state is just an array of values 0,1,2,3,5
what is the problem??

The problem must be somewhere else

In[154]:= states = Range[0, 5];
Count[states, 0 | 1 | 3]

Out[155]= 3

that’s correct (Mathematica 10.1, Windows 7 64 Bit Home Premium), because 3 entries of {0,1,2,3,4,5} fullfill the pattern of being 0 or 1 or 3. Possibly the Alternatives sign | got the wrong key on problem owners key board?